プロが教える店舗&オフィスのセキュリティ対策術

変数varにtestで始まる文字列が格納されているかされていないかを判定し、
testで始まる文字列が格納されていない場合、ある処理をしたいです。
以下のようにすると、tまたはeまたはsまたはtで始まるかどうかを判定してしまいます。

case "$var" in
[!test]* );;
esac

どのように書けばよいでしょうか?
ヒントでも良いので教えてください。

A 回答 (3件)

case "$var" in


test*)
testで始まるときの処理
;;
*)
testで始まらないときの処理
;;
esac

・caseは上から調べて、パターンが一致したら、それより下は処理されない。
・*は「全てに一致」
なので、最後に*)とすると、C言語のswitch文での default: と同様の働きになります。
    • good
    • 0

bash 系ですがどうでしょう?


拡張パターンが必要みたいでしたので shopt で指定しています。

shopt -s extglob
var=$1;

case ${var} in
!("test"*) )
echo "var ${var} not start test"
;;
"test"* )
echo ${var}
;;
esac

あまり case 文で否定は使わない(使いにくい)です。
このケースでしたら僕なら普通に if で書いちゃいます。
    • good
    • 0

なぜ [...] としたの?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!