我意识到'='和'=='运算符在if语句中工作。例如:
var="some string"
if [ "$var" == "some string" ];then
#doing something
fi
if [ "$var" = "some string" ];then
#doing something
fi
如果上面的语句在bash and Sh中都效果很好。我只是想知道它们之间是否有任何区别?谢谢...
在单个支架内进行条件测试(即[...]),单个=所有shell支持,其中==不受某些较旧的外壳的支持。p>在双括号内进行条件测试(即[[...]]),旧或新壳没有区别。
编辑:我还要注意:如果可能的话,请务必使用双括号[[...]],因为它比单个括号更安全。我将用以下示例说明为什么:
if [ $var == "hello" ]; then
如果$ var恰好是空的/空的,那么这就是脚本看到的:
if [ == "hello" ]; then
这将打破您的脚本。解决方案是使用双括号,或者始终记得在变量周围放引号(" $ var")。双括号是更好的防御性编码实践。
它们在算术评估中不同
在双括号内,=
不能用于比较,而==
工作正常,例如
(( $var == 3 ))
工作正常
(( $var = 3 ))
给出错误(比较)。
(( var = 3 ))
works(分配),但这总是评估为true