Я пытаюсь использовать переменную, состоящую из разных строк, разделенных с помощью |
в качестве 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, звездочку, точку с запятой и символы новой строки. Ужасно, но это "работает".