
以下は、私が混乱している大きなコードの一部である簡単な行です。
if [ $some_line == "text" ]
then
その後、作業していた別のプログラムに同じコードを使用しましたが、「=="」を「="」に変更しない限り、コードは機能しませんでした。ここでいくつかのスレッドを確認しましたが、どちらも同じように動作するため、単一の等号を使用するか二重の等号を使用するかは問題ではないようです。
if [ $some_line = "text" ]
then
したがって、最初のコードは server1 では機能しますが、"single equals" に変更しない限り server2 では機能しません。両方のサーバーの環境はまったく同じです。
誰か説明してもらえますか? ありがとう!
編集 - スクリプトを毎回「bash myscript.sh」として実行しています。
答え1
==
および は、のテスト=
内では同等です。[ ]
bash
==
では機能しませsh
ん。=
両方のスクリプトを同じシェルで実行していますか?
例:
$ cat test1
#!/bin/bash
if [ "a" == "a" ];then echo match;fi
$ ./test1
match
$ cat test2
#!/bin/bash
if [ "a" = "a" ];then echo match;fi
$ ./test2
match
$ cat test3
#!/bin/sh
if [ "a" = "a" ];then echo match;fi
$ ./test3
match
$ cat test4
#!/bin/sh
if [ "a" == "a" ];then echo match;fi
$ ./test4
./test4: 2 [: a: unexpected operator