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