5

'='演算子と'=='演算子の両方がifステートメントで機能することに気づきました。例えば:

var="some string"
if [ "$var" == "some string" ];then
    #doing something
fi

if [ "$var" = "some string" ];then
    #doing something
fi

上記のifステートメントは両方ともbashとshでうまく機能しました。違いがあるのか​​な?ありがとう...

4

2 に答える 2

9

条件テスト用の単一括弧内(つまり[...])では、single =はすべてのシェルでサポートされていますが、as==は一部の古いシェルではサポートされていません。

状態テスト用の二重ブラケット(つまり[[...]])の内側では、古いシェルと新しいシェルに違いはありません。

編集:次の点にも注意する必要があります。単一の角かっこよりも安全であるため、可能であれば常に二重の角かっこ[[...]]を使用してください。次の例でその理由を説明します。

if [ $var == "hello" ]; then

$varがnull/emptyの場合、スクリプトは次のように認識します。

if [ == "hello" ]; then

スクリプトが壊れます。解決策は、二重角かっこを使用するか、変数( "$ var")を常に引用符で囲むことを忘れないでください。二重角かっこは、防御的なコーディング方法として優れています。

于 2012-10-18T06:42:11.207 に答える
1

算術評価が違います

二重括弧内で=は、比較には使用できませんが、==正常に機能します。

(( $var == 3 ))正常に動作します

(( $var = 3 ))エラーが発生します(比較)。

(( var = 3 ))動作します(割り当て)が、これは常にTRUEと評価されます

于 2012-10-18T07:35:58.227 に答える