Я намагаюся використовувати змінну, що складається з різних рядків, розділених тестом a |
як 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
, уникаючи $ вибір, паролі, зірочки, крапки з комою та нові рядки. Некрасиво, але це "працює".