shell中有很多长相相似的括号命令,经常弄混,特此整理它们各自的作用。
$()
用于执行命令并获取命令的结果
| 1 | $ echo echo test //第二个echo无法执行,而是被当作字符串 | 
| 1 | $ echo $(echo test) //括号内的echo被执行,整个表达式$(echo test)的结果为test,然后第一个echo命令继续执行,参数为test | 
另一种执行命令的方式是用反引号 ``
| 1 | $ echo `echo test` | 
用反引号的移植性更好,基本所有的shell都支持这种方式,而$()方式的可读性更好
${}
用于解析变量及精确界定变量名称的范围
| 1 | $ name=test | 
[]
等同于test命令,用于判断给定的表达式是否成立
| 1 | $ [1 -eq 2] | 
使用[]时,左括号的右侧和右括号的左侧必须有一个以上的空格,不然会报错
| 1 | $ [ 1 > 2 ] //会在当前目录生成一个名为2的文件 | 
| 1 | $ [ 1 \> 2 ] | 
若使用>及<则必须进行转译,不然会被认为是重定向
[[]]
[[]]是test及[]命令的增强版,增加了一个字符串表达式string=~regex
| 1 | $ [[ "test" =~ ^-?[0-9]+$ ]] | 
在[[]]中使用<和>,不需要转译
在[[]]中的==支持模式匹配
| 1 | $ file=test.txt | 
(())
(())是为整数设计的,只能用于处理整数
| 1 | $ (( "" == "t" )) //报错 | 
与[[]]类似,(())中使用<和>也是不需要转译的
$[]与$(())
$[]与$(())是相同的,都是用于数学运算
| 1 | //这里的左括号右边与右括号左边的空格不是必须的 | 
默认的输出结果为十进制,$(())还可以进行不同进位的运算(二进制、八进制、十六进制等转为十进制),指定进制及数值,输出其十进制的值
| 1 | //$(( 进制#数值 )) | 
