Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]做用与区别

转载自shell

https://blog.csdn.net/x1269778817/article/details/46535729编程

参考:bash

https://stackoverflow.com/questions/669452/is-double-square-brackets-preferable-over-single-square-brackets-in-ba.net

https://unix.stackexchange.com/questions/68694/when-is-double-quoting-necessary命令行

$()和 ` `  :unix

在 bash shell 中,$( ) 与` ` (反引号) 都是用来作命令替换用(commandsubstitution)的。blog

例如   version=$(uname -r)和version=`uname -r`均可以是version获得内核的版本号ip

各自的优缺点:
1. `  ` 基本上可用在所有的 unix shell 中使用,若写成 shell script ,其移植性比较高。但反单引号容易打错或看错。字符串

2. $()并非全部shell都支持。字符串处理

 

${ } :

${ }用于变量替换。通常状况下,$var 与${var} 并无啥不同。可是用 ${ } 会比较精确的界定变量名称的范围。好比

$ A=B
$ echo $AB
本来是打算先将 $A 的结果替换出来,而后再补一个 B 字母于其后,
但在命令行上,真正的结果倒是只会提换变量名称为 AB 的值出来…
若使用 ${ } 就没问题了:
$ echo ${A}B
BB

${ }的功能远不止于此,详见下表。

 

$[] $(()) :

它们是同样的,都是进行数学运算的。支持+ - * / %:分别为 “加、减、乘、除、取模”。可是注意,bash只能做整数运算,对于浮点数是看成字符串处理的。

例:
$ a=5; b=7; c=2
$ echo $(( a+b*c ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a*b)%c))
1

在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也能够不用,如:
$(( $a + $b * $c)) 也可获得 19 的结果
此外,$(( )) 还可做不一样进位(如二进制、八进位、十六进制)做运算呢,只是,输出结果皆为十进制而已:
echo $((16#2a)) 结果为 42 (16进位转十进制)

 

[ ] :

即为test命令的另外一种形式。

但要注意许多:

1.你必须在左括号的右侧和右括号的左侧各加一个空格,不然会报错。

2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。不少人会记反了。使用反了,shell可能得不到正确的结果。

3.大于符号或小于符号必需要转义,不然会被理解成重定向。

(( ))及[[ ]] :

它们分别是[ ]的针对数学比较表达式和字符串表达式的增强版。

其中(( )),不须要再将表达式里面的大小于符号转义,除了可使用标准的数学运算符外,还增长了如下符号:

具体还能够看Linux 命令行与shell脚本编程大全

 

相关文章
相关标签/搜索