理系学生日記

おまえはいつまで学生気分なのか

Bash で endsWith (文字列が特定の文字列が終わるかを確認する)

Bash において、変数が特定の文字列で終わるかを確認したいケースがあります。 これ Bash のみで実現が可能です。

    [[ ${user_arn} == *Terraformer ]]

Bash における [[[

シェルスクリプトで使用される [ がコマンドである事実はよく知られていますが、[[ は bash 等のシェルで独自に実装されています。

$ type '['
[ is a shell builtin
$ type '[['
[[ is a reserved word

Bash では [[]] に対してかなり拡張した実装をしています。これを条件分岐時に使用すると、正規表現マッチの利用ができたり、[ でのハマりどころ (文字列比較で > をエスケープする必要がある等) が回避できたりします。

そして、Bash においては [[]] の中においても glob pattern を利用できます。これを利用すれば、文字列末尾の一致確認等が実現できます。

$ [[ hogehoge = hoge* ]] && echo "match"
match

$ [[ fugahoge = hoge* ]] && echo "match"

$ [[ hogehoge = *hoge ]] && echo "match"
match

$ [[ hogehogefuga = *hoge ]] && echo "match"

Bash における Glob についてはこちらをご参照ください。