ケースには空白または特定の文字が許可されます。

ケースには空白または特定の文字が許可されます。

一部のメディア処理は次のとおりです。

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かそのうちの1つかはわかりません。all

この問題をどのように解決できますか?

答え1

使用パターン

all|""

1つallまたは空の文字列と一致します。

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

関連情報