- ベストアンサー
【シェル】case文でワイルドカードを使う
変数varにtestで始まる文字列が格納されているかされていないかを判定し、 testで始まる文字列が格納されていない場合、ある処理をしたいです。 以下のようにすると、tまたはeまたはsまたはtで始まるかどうかを判定してしまいます。 case "$var" in [!test]* );; esac どのように書けばよいでしょうか? ヒントでも良いので教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
case "$var" in test*) testで始まるときの処理 ;; *) testで始まらないときの処理 ;; esac ・caseは上から調べて、パターンが一致したら、それより下は処理されない。 ・*は「全てに一致」 なので、最後に*)とすると、C言語のswitch文での default: と同様の働きになります。
その他の回答 (2)
- NARH
- ベストアンサー率82% (88/107)
回答No.2
bash 系ですがどうでしょう? 拡張パターンが必要みたいでしたので shopt で指定しています。 shopt -s extglob var=$1; case ${var} in !("test"*) ) echo "var ${var} not start test" ;; "test"* ) echo ${var} ;; esac あまり case 文で否定は使わない(使いにくい)です。 このケースでしたら僕なら普通に if で書いちゃいます。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
なぜ [...] としたの?