Tôi đang cố gắng sử dụng một biến bao gồm các chuỗi khác nhau tách ra với một |
như một case
bài kiểm tra tuyên bố. Ví dụ:
string="\"foo\"|\"bar\""
read choice
case $choice in
$string)
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Tôi muốn có thể gõ foo
hoặc bar
thực hiện phần đầu tiên của case
câu lệnh. Tuy nhiên, cả hai foo
và bar
đưa tôi đến lần thứ hai:
$ foo.sh
foo
Bad choice!
$ foo.sh
bar
Bad choice!
Sử dụng "$string"
thay vì $string
làm cho không có sự khác biệt. Không sử dụng string="foo|bar"
.
Tôi biết tôi có thể làm theo cách này:
case $choice in
"foo"|"bar")
echo "You chose $choice";;
*)
echo "Bad choice!";;
esac
Tôi có thể nghĩ ra nhiều cách giải quyết khác nhau nhưng tôi muốn biết liệu có thể sử dụng một biến làm case
điều kiện trong bash không. Có thể và, nếu vậy, làm thế nào?
read
bit đã ngăn tôi lại. theo ý kiến của tôi, xác thực đầu vào của người dùng, đó là những gì có vẻ như vậy, case
các mẫu không nên ở đầu danh sách đánh giá và thay vào đó nên được cắt theo *
mẫu mặc định sao cho kết quả duy nhất đạt được ở đó được đảm bảo chấp nhận được. Tuy nhiên, vì vấn đề là phân tích cú pháp / lệnh mở rộng, nên đánh giá thứ hai có thể là điều được yêu cầu.
eval
, thoát khỏi sự lựa chọn $, parens, dấu hoa thị, dấu chấm phẩy và dòng mới. Xấu xí, nhưng nó "hoạt động".