'='演算子と'=='演算子の両方がifステートメントで機能することに気づきました。例えば:
var="some string"
if [ "$var" == "some string" ];then
#doing something
fi
if [ "$var" = "some string" ];then
#doing something
fi
上記のifステートメントは両方ともbashとshでうまく機能しました。違いがあるのかな?ありがとう...
条件テスト用の単一括弧内(つまり[...])では、single =はすべてのシェルでサポートされていますが、as==は一部の古いシェルではサポートされていません。
状態テスト用の二重ブラケット(つまり[[...]])の内側では、古いシェルと新しいシェルに違いはありません。
編集:次の点にも注意する必要があります。単一の角かっこよりも安全であるため、可能であれば常に二重の角かっこ[[...]]を使用してください。次の例でその理由を説明します。
if [ $var == "hello" ]; then
$varがnull/emptyの場合、スクリプトは次のように認識します。
if [ == "hello" ]; then
スクリプトが壊れます。解決策は、二重角かっこを使用するか、変数( "$ var")を常に引用符で囲むことを忘れないでください。二重角かっこは、防御的なコーディング方法として優れています。
算術評価が違います
二重括弧内で=
は、比較には使用できませんが、==
正常に機能します。
(( $var == 3 ))
正常に動作します
(( $var = 3 ))
エラーが発生します(比較)。
(( var = 3 ))
動作します(割り当て)が、これは常にTRUEと評価されます