1. ホーム
  2. string

[解決済み] Bashのcaseステートメントで空文字列をテストするには?

2023-01-03 10:08:38

質問

変数の値に基づいてアクションを実行するBashスクリプトがあります。case文の一般的な構文は次のとおりです。

case ${command} in
   start)  do_start ;;
   stop)   do_stop ;;
   config) do_config ;;
   *)      do_help ;;
esac

コマンドが提供されない場合、デフォルトのルーチンを実行したいと思います。 do_help を実行したい。このようにcaseの値を省略してみました。

case ${command} in
   )       do_default ;;
   ...
   *)      do_help ;;
esac

結果は予想できたと思います。

syntax error near unexpected token `)'

次に、正規表現を使ってみました。

case ${command} in
   ^$)     do_default ;;
   ...
   *)      do_help ;;
esac

これによって、空の ${command} に落ちます。 * のケースになります。

私は不可能を可能にしようとしているのでしょうか?

どのように解決するのですか?

この case 文は正規表現ではなくグロブを使用し、完全一致を保証します。

ですから、空の文字列は通常通り、次のように書かれます。 "" あるいは '' :

case "$command" in
  "")        do_empty ;;
  something) do_something ;;
  prefix*)   do_prefix ;;
  *)         do_other ;;
esac