linux shell if的[]和[[]]

  • Post author:
  • Post category:linux




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

这组字符仅包括向后兼容。

不建议使用这些,但经常出现在较旧的或写得不好的脚本中。


在这里插入图片描述

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



版权声明:本文为inthat原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。