$()
用作命令替换,同``,如var=`ls` 和var=$(ls)的结果一样
可以使用echo $var | xargs –n 1查看
${}
用作变量替换,与$类似,但是可以做形如var=${A}B这种工作,即在变量A后面增加一个B,可以认为是加强版的$A
$(())
用于计算,同样可用于计算的还有let, expr
如
res=$((5+2))
let res=5+2
res=`expr 5 + 2`
[[]]与[]
1、 前者“[[”是关键字,后者是内建命令,相当于test ;
2、 逻辑判断用法不一致
[ : -a –o
[[ : && ||
3、 对于[]来说,要用-eq 等进行数字比较,而不能传入字符串和数字进行比较,而在[[]]中会把字符串直接转为0;当比较的变量为空时,使用[]就会报错,而[[]]不存在这种问题
如
4、 [[]]可以用于算术运算,而[]不行
如:
[[ 99+1 –eq 100 ]] true
[ 99+1 –eq 100 ] 报错, 但可以使用[ $((99+1)) –eq100 ]
5、 命令行参数的区别
1) [ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符">" 与"<"必须转义,否则就变成IO重定向了;
如: [ 0 < 1] 与[[ 0 < 1]]
2) 由于"[["是关键字,不会做命令行扩展,所以在[[中"<"与">"不需转义,但是相对的语法就稍严格些。例如在[ ... ]中可以用引号括起操作符,因为在做命令行扩展时会去掉这些引号,而在[[ ... ]]则不允许这样做;
$[[ "-z" "" ]] 报错,而$[“-z” “”] true