unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

シェルスクリプトでの正規表現を使ったバリデーション

exprコマンドを使う方法

target='aa bbcc'

# 正規表現をクォートする。
# 変数展開時はワード分割を避けるためにクォートする。
if expr "${target}" : "^a\+ [b-c]\{4\}$" > /dev/null; then
    echo "match"
fi

# 正規表現にマッチしない条件分岐をするには!を使う。
if ! expr "${target}" : "^a\+ [b-c]\{3\}$" > /dev/null; then
    echo "mismatch"
fi

[[ ]] 構文を使う方法(bashzshなど)

target='aa bbcc'

# bash: 正規表現をクォートしない。
# zsh: 正規表現をクォートする。
# 変数展開時のクォートは不要。
if [[ ${target} =~ ^a+' '[b-c]{4}$ ]]; then
    echo "match"
fi

# 正規表現にマッチしない条件分岐をするには!を使う。
if [[ ! ${target} =~ ^a+' '[b-c]{4}$ ]]; then
    echo "mismatch"
fi

参考