Я пытаюсь использовать переменную, состоящую из разных строк, разделенных с помощью |в качестве caseпроверки операторов. Например:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Я хочу иметь возможность набрать fooили barвыполнить первую часть caseзаявления. Впрочем, и то, fooи другое barменя возьмут
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Использование "$string"вместо $stringне имеет значения. Ни один не использует string="foo|bar".
Я знаю, что могу сделать это так:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Я могу думать о различных обходных путях, но я хотел бы знать, возможно ли использовать переменную в качестве caseусловия в bash. Возможно ли это, и если да, то как?
readбит остановил меня. по моему мнению, проверка правильности ввода данных пользователем, что и выглядит, что caseшаблоны не должны быть в верхней части списка оценки, а должны быть сокращены до *шаблона по умолчанию, так что единственные результаты, которые там достигаются, гарантированно приемлемы. Тем не менее, поскольку проблема заключается в порядке разбора / расширения, тогда может потребоваться вторая оценка.
eval, исключая $ choice, parens, звездочку, точку с запятой и символы новой строки. Ужасно, но это "работает".