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 | //$(( 进制#数值 )) |