명령문 테스트 |로 분리 된 다른 문자열로 구성된 변수를 사용하려고합니다 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
다양한 해결 방법을 생각할 수 있지만 casebash에서 변수를 조건 으로 사용할 수 있는지 알고 싶습니다 . 가능하다면 어떻게합니까?
read비트가 나를 막았다. 내 의견으로는 사용자 입력 유효성 검사는 case패턴으로 평가 목록의 최상위에 있지 않아야하며 *기본 패턴 으로 잘라내어 도달하는 유일한 결과가 허용되도록 보장해야합니다. 여전히 문제는 파싱 / 확장 순서이기 때문에 두 번째 평가가 필요할 수 있습니다.
eval$ 선택, 이스케이프, 별표, 세미콜론 및 줄 바꿈을 탈출 하여 사례 진술을 래핑 할 수 있습니다. 추악하지만 "작동"합니다.