天天看點

shell程式設計中條件測試的=和==的差別

在某國外shell程式設計書籍上看到對shell程式設計的建議中提到,建議在條件測試時使用=而不是==

對這個建議表示疑惑,在大多數的程式設計語言中判斷相等一般都是==符号,經過測試=的确也可以用來進行相等判斷;但為什麼會有盡量使用=而不是==的建議呢。

經過查閱資料并實際驗證發現,這個建議是為了送出shell程式設計的相容性;

給出一個例子

#!/bin/sh
WWW=A

if [ "$WWW" == "A" ]; then
    echo 'support ==';
else
    echo 'not support ==';
fi
           

測試結果

dash:
    : [: A: unexpected operator
    not support ==
tcsh:
    test: unknown operator ==   
bash:
    support ==
ksh:
    support ==
           

在[]中使用==是bash裡的做法, 不符合posix标準

Do not use ==. It is only valid in a limited set of shells, and will produce unspecified behavior.

參考

http://stackoverflow.com/questions/10849297/compare-a-string-in-unix