bashで文字列比較演算子を書くこと最近増え、少し悩んだので備忘録。
前置き
bashでは文字列比較演算子を『==』でも『=』でもどっちにしても、以下のように実行可能である。
if [ ${env_prac} == "demo" ]; then
echo "equal environment"
fi
if [ ${env_prac} = "demo" ]; then
echo "equal environment"
fi
これってどっちが推奨されているのか、何の違いがあるんだろう?
POSIX準拠とBash拡張
文字列比較はPOSIX準拠とBash拡張で固有の記法があり、その点違いがあるみたい。
Bash固有:
[[ ${env_prac} == "value" ]]
[[ ... ]]
はBashで導入された新しい構文で、より強力で安全な条件式を提供する。
この記法では=, ==どっちでも利用可能。
POSIX準拠:
[ ${env_prac} = "value" ]
[ ... ]
はPOSIX仕様として標準化されているもの。
OSIX仕様の[ ... ]
では、=のみサポートされており==は定義されていない。
ただ、基本的にbashを使う際、[ ... ]
でも==が使える。
これはBashの拡張機能によるもので、完全上位互換によるため。
結論
- POSIX準拠シェルでは文字列比較には
=
を使う。 ==
は Bash 拡張であり、POSIX標準には含まれていないため、使うシェルによっては動作しないケースもある。
参考