bash内の文字列比較演算子==, =について備忘録

bashで文字列比較演算子を書くことが少なく、少し悩んだので備忘録。

概要

bashでは文字列比較演算子を『==』でも『=』でもどっちにしても、以下のように実行可能である。


if [ ${env_prac} == "demo" ]; then
 echo "Valid environment" 
fi 

if [ ${env_prac} = "demo" ]; then
 echo "Valid environment" 
fi

これってどっちが推奨されているのか?

 

POSIX準拠とBash拡張

文字列比較は、POSIX準拠とBash拡張で固有の記法になっているものがあるらしい。

POSIX準拠:
[ "$var" = "value" ]
Bash固有:
[[ "$var" == "value" ]]

[[ ... ]]はBashで導入された新しい構文で、より強力で安全な条件式を提供する。

これでは=, ==どっちでも利用可能らしい。

しかし[ ... ] はPOSIX仕様として標準化されているもの。

 

POSIX仕様の、[ ... ]において==は定義されていない。

POSIX標準には=のみがサポートされている。

ただ、基本的に[ ... ]でも==が使えたりする。これはBashの拡張機能によるもので、POSIX準拠シェルでは未定義の動作になることがあるとか。

結論

  1. POSIX準拠シェルでは文字列比較には = を使う。
  2. == は Bash 拡張であり、POSIX標準には含まれていないため、動作しないケースもある。

 

参考

bashの最新記事8件