7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bash内の文字列比較演算子"==", "="の違いについて

Last updated at Posted at 2024-09-04

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の拡張機能によるもので、完全上位互換によるため。

結論

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

参考

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?