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

这组字符仅包括向后兼容。不建议使用这些,但经常出现在较旧的或写得不好的脚本中。
在这里插入图片描述

总结:[]不建议使用,缺乏[[]]的许多特征。一般出现在较旧的或写得不好的脚本中。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐