케이스에는 비어 있거나 특정 문자가 허용됩니다.

케이스에는 비어 있거나 특정 문자가 허용됩니다.

일부 미디어 처리는 다음과 같습니다.

case "$3" in
all)
  :
  ;;
[a-z][a-z][a-z])
  if [ "$2" == "subtitles" ]; then switches="$switches -s $3"
  if [ "$2" == "audio" ]; then switches="$switches -a $3"
  ;;
*)
  printf 'Invalid language code for language (should be 3-letter ISO-639 or "all"): %s\n' "$2"
  exit 1
  ;;
esac

이는 az 사이에 $31~3개의 문자가 있는지 확인하기 위한 것입니다 all. 내 문제는 비어 있으면 *명령이 실패한다는 것입니다. $3삭제하면 계속할 수는 있는데, az 사이에 있는 3글자 $3인지 그 중 하나인지 알 수 없습니다.all

이 문제를 어떻게 해결할 수 있나요?

답변1

사용 패턴

all|""

하나 all또는 빈 문자열과 일치합니다.

case "$3" in
    all|"") ;;
    [a-z][a-z][a-z])
        other-code ;;
    *)
        catch-all-code
esac

관련 정보