我可以看到一些文章,如this,其中提到「-eq」用於比較整數,但這並不表示我們不能使用「==」來比較整數。哪個比較好用「==」或「-eq」比較bash shell中的整數?
我對bash shell進行了本地驗證,「==」工作正常。 所以任何人都可以讓我幫忙瞭解哪個更好的選擇使用,如果「-eq」那麼爲什麼?
我可以看到一些文章,如this,其中提到「-eq」用於比較整數,但這並不表示我們不能使用「==」來比較整數。哪個比較好用「==」或「-eq」比較bash shell中的整數?
我對bash shell進行了本地驗證,「==」工作正常。 所以任何人都可以讓我幫忙瞭解哪個更好的選擇使用,如果「-eq」那麼爲什麼?
要比較整數,請使用-eq
。區別在於==
比較字符串值,而-eq
比較數字值。這裏是它們產生不同的結果的一個示例:
$ [ 03 = 3 ] ; echo $?
1
$ [ 03 -eq 3 ] ; echo $?
0
它是使用[[
相同:
$ [[ 03 == 3 ]] ; echo $?
1
$ [[ 03 -eq 3 ]] ; echo $?
0
爲數字,03
等於3
。但是,作爲字符串03
和3
是不同的。
摘要: 要爲相等比較數值,使用-eq
順便說一句 - 我發現有必要添加我自己的答案只有幾個原因:沒有提及數學上下文(在這種情況下'=='是正確的),暗示'=='是在' [[]]'即使是字符串(但是當使用'[]'時導致POSIX不符合習慣)。 –
這取決於上下文。在數學上下文中(如果你正在爲bash編寫腳本,那麼最好使用==
)。
((foo == 3)) ## foo = 3 would be an assignment here, and foo -eq 3 an error
數學上下文也存在於其他情況下 - 例如,索引到非關聯數組,使得==
優選但-eq
非法在下面contrieved例如:
foo=(yes no)
bar=3
echo "${foo[bar == 3 ? 0 : 1]}" # echoes "yes"
在[[ ]]
中,使用-eq
。
[[ $foo -eq 3 ]] ## $foo = 3 would be a string comparison here; $foo == 3 is a synonym,
## but bad finger-memory to have if one wants to write POSIX code
## elsewhere.
在[ ]
,使用-eq
- 也報價:
[ "$foo" -eq 3 ] ## = would be a valid string comparison here; == would be a
## POSIX-incompatible string comparison here; -eq is correct.
即使是字符串,''==是不是裏面'[]'最佳實踐; POSIX sh標準僅指定'='。 Bash支持'==',但這是一個擴展,並且使用它的腳本可能與所有其他POSIX shell不兼容。 –
@CharlesDuffy所以'=='a「bashism」? – amdixon
@amdixon,正確。 –