ダッシュの変数正規表現テスト?

ダッシュの変数正規表現テスト?

[a-z][0-9]たとえば、1 つの文字と 1 つの数字の形式でできるだけ多くの変数を取得します。ダッシュでテストする方法はありますか?それは次のとおりです。

myvar=o7
if [ $myvar=o[0-4] ]; then 
"do this"
elif [ $myvar=o[5-7] ]; then
"do that"
fi

よろしくお願いします:)

ベストアンサー1

必要なものを達成するために正規表現は必要ありません。

case $myvar in
    o[0-4])
        echo 'do this'
        ;;
    o[5-7])
        echo 'do that'
        ;;
    *)
        echo 'unsupported case'
esac

あるいはもう少し簡単に言えば、

case $myvar in
    o[0-4]) echo 'do this' ;;
    o[5-7]) echo 'do that' ;;
    *)      echo 'unsupported case'
esac

ここでは$myvar、与えられた各ケースラベルに対して値を順にマッチングし、最初に一致するラベルに対応するコードが実行される。;;タグのコードを次のタグから分離します。つまり、最後のタグは必要 ;;)が終わる前にesac

各タグは正規表現ではなく、ワイルドカードパターンまたはpattern)形式になっています。(pattern)

このcase...esac構造は、特定のタスクを実行する標準的で簡単な方法を提供し、次のように書くこともできます。

if [[ $myvar == o[0-4] ]]; then
    echo 'do this'
elif [[ $myvar == o[5-7] ]]; then
    echo 'do that'
else
    echo 'unsupported case'
fi

そして同様の殻bash

おすすめ記事