linux shell if的[]和[[]]
[]和test
[]和test两者是一样的,在命令行里test expr和[ expr ]的效果相同。
test的三个基本作用是判断文件、判断字符串、判断整数。
- test中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。
if [[]]
这是内置在shell中的一个命令。
if [[]] 的空格问题,使用if [[]] 不要吝啬空格:
if [[ $1 != "start" && $1 != "stop" ]]
在if之后要用空格,[[ 之后要有一个空格,]]之前要有空格,不然会出错.
elif [[ $1 == "stop" ]]
双等号两边要有空格不然后会出错.
if [[]] 要求括号里的表达式前后必须有一个空格,格式如 if [[ xxx ]]。 当 if [[]] 用于字符串常量或变量比较时,表达式本身的运算符,如 <、>、==、!= ,其前后可以不加空格; 但当 if [[]] 用于数值比较时,表达式本身的运算符前后必须加空格,否则会得到相反的结果。
因此,总结:一般的写法都是运算符前后加上空格。
if的[]和[[]]两者区别以及总结
SpecialCharacters http://mywiki.wooledge.org/BashGuide/SpecialCharacters What is the difference between the Bash operators [[ vs [ vs ( vs ((? 参考URL: https://unix.stackexchange.com/questions/306111/what-is-the-difference-between-the-bash-operators-vs-vs-vs
[]逻辑测试使用-a、-o [[]]比[]通用,逻辑测试使用&&、|| 在[]里面,使用-eq的时候,需要用整数来做参数,如果是非整数就会提示报错,而[[]]则直接把非整数的字符串转成了0
这组字符仅包括向后兼容。不建议使用这些,但经常出现在较旧的或写得不好的脚本中。
总结:[]不建议使用,缺乏[[]]的许多特征。一般出现在较旧的或写得不好的脚本中。
|