Linux中双小括号,双中括号用法总结

文章目录

  • Linux中双小括号,双中括号用法总结
    • 一、双小括号 (( ))
    • 二、 双中括号[[]]
    • 三、小括号和花括号

Linux中双小括号,双中括号用法总结

一、双小括号 (( ))

①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码 为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

((1+1))

echo $? #输出0(0是退出状态,要与返回值(为真)区别,可以理解为正常退出)

((1<1))

echo $? #输出一个正整数

②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

echo $((1+2)) #输出3

echo $((1<1)) #输出0

③单纯用 (( )) 也可重定义变量值

④双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。

a=1;

((++a))

echo $a #输出2

if ((a<3)); then …

二、 双中括号[[]]

①[[]]是bash程序语言的关键字。并不是一个命令,[[]]结构比[]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。

②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

③使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用 if [[ $a !=1 && $a != 2 ]] , 如果不使用双括号, 则为 if [ $a -ne 1] && [ $a -ne 2 ] 或者 if [ $a -ne 1 -a $a -ne 2 ]。

④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

[[ 2<3 ]] && echo true || false

#true

[[ 2 -lt 3 ]] && echo true || false

#true

三、小括号和花括号

小括号中的内容称命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括 号之间不必有空格。命令替换。等同于 cmd ,shell扫描一遍命令行,发现了( cmd ) 结构 ,便将(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。

花括号中的内容为代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,花括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。

你可能感兴趣的:(linux,bash,运维)