Unixテストでは、テストコマンドでeq vs = vs ==をいつ使用する必要がありますか?

Unixテストでは、テストコマンドでeq vs = vs ==をいつ使用する必要がありますか?

-eqいつvs =vsを使用する必要がありますか?==

例えば

[[ $num -eq 0 ]]

[[ $num = 'zzz' ]]

-eq-ne数字と文字列を表すために(andなど)を使用するパターンを観察しました=。これには理由がありますか?いつ使うべきですか?==

答え1

これがオペランドの定義だからです。 ~からPOSIXテスト文書、OPERANDSセクション:

s1 = s2

文字列 s1 と s2 が等しい場合は真、そうでなければ偽です。

...

n1-eq n2

整数 n1 と n2 が代数的に等しい場合は真、そうでなければ偽です。

==bashPOSIXで定義されたものではなく、から派生した拡張ですksh==移植性を望むときは使用しないでください。 ~からbash ドキュメント - Bash 条件式:

文字列1 ==文字列2

文字列1 = 文字列2

文字列が等しい場合は真です。POSIX 準拠を保証するには、テストコマンドで '=' を使用する必要があります。

答え2

シンボルは=文字列比較に使用され、-eq整数比較には使用されません。両方testと一緒に動作します[...]bashthenを構文と共に使用すると、文字列比較[[...]]にも使用できます。また、 ==bash=と(==例:[[...]]patterns[[ $x == y* ]]

答え3

次の順序は、より詳細な
ヘルプを提供します。

gnu:~$ [ sam -eq sam ]  
bash: [: sam: integer expression expected  
gnu:~$ echo "Exit status of \"[ sam -eq sam ]\" is $?."  
Exit status of "[ sam -eq sam ]" is 2.  

gnu:~$ [ 5 -eq 5 ]  
gnu:~$ echo "Exit status of \"[ 5 -eq 5 ]\" is $?."  
Exit status of "[ 5 -eq 5 ]" is 0.  

gnu:~$ [ 5 = 5 ]  
gnu:~$ echo "Exit status of \"[ 5 = 5 ]\" is $?."  
Exit status of "[ 5 = 5 ]" is 0.  

gnu:~$ [ sam = sam ]  
gnu:~$ echo "Exit status of \"[ sam = sam ]\" is $?."  
Exit status of "[ sam = sam ]" is 0.  

gnu:~$ [ 5 == 5 ]  
gnu:~$ echo "Exit status of \"[ 5 == 5 ]\" is $?."  
Exit status of "[ 5 == 5 ]" is 0.  

gnu:~$ [ sam == sam ]  
gnu:~$ echo "Exit status of \"[ sam == sam ]\" is $?."  
Exit status of "[ sam == sam ]" is 0.  

gnu:~$ (( 5 == 5 ))  
gnu:~$ echo "Exit status of \"(( 5 == 5 ))\" is $?."  
Exit status of "(( 5 == 5 ))" is 0.  

gnu:~$ (( sam == sam ))  
gnu:~$ echo "Exit status of \"(( sam == sam ))\" is $?."  
Exit status of "(( sam == sam ))" is 0.  

gnu:~$ ( sam = sam )  
The program 'sam' is currently not installed. You can install it by typing:  
sudo apt-get install simon  
gnu:~$ echo "Exit status of \"( sam = sam )\" is $?."  
Exit status of "( sam = sam )" is 127.  

gnu:~$ ( 5 = 5 )  
5: command not found  
gnu:~$ echo "Exit status of \"( 5 = 5 )\" is $?."  
Exit status of "( 5 = 5 )" is 127.  

gnu:~$ ( sam == sam )  
The program 'sam' is currently not installed. You can install it by typing:  
sudo apt-get install simon  
gnu:~$ echo "Exit status of \"( sam == sam )\" is $?."  
Exit status of "( sam == sam )" is 127.  

gnu:~$ ( 5 == 5 )  
5: command not found  
gnu:~$ echo "Exit status of \"( 5 == 5 )\" is $?."  
Exit status of "( 5 == 5 )" is 127.  

答え4

からman test

-eq、等。

リレー算術テスト。引数は完全に数値(負の数)であるか、STRINGの長さで評価される特別な式「-l STRING」でなければなりません。

STRING1 = STRING2

 True if the strings are equal.

STRING1 == STRING2

 True if the strings are equal (synonym for =).

So===は同義語です。

関連情報