[],[[]],(),(()),{},{{}},以及在前面加上$的区别,以及它们互相杂交组合的区别!!!
[[ ]] double brackets
(())Double parentheses
{{}}double curly brackets
我们必须要记住的是下面
[] 相当于test,作逻辑判断
$( ) 与` ` (反引号) 都是用来做命令替换用
${ } 吧... 它其实就是用来作变量替换用的啦
(())就是用来计算的,相当于expr函数。
http://tldp.org/LDP/abs/html/index.html
我们首先看看一对的括号
首先[]是用来逻辑判断的,必须有空格
if [ -f binom.py ]
then
echo 'binom.py exists'
fi
或者
nub=$((i%4))
#echo $nub
if [ $nub == 0 ];then
echo "we need to sleep 4 hours"
sleep 14000
fi
这个[]操作符等价于test函数
if test $1 -gt 0
then
echo "$1 number is positive"
fi
但是都必须有空格!!!
参考:http://www.freeos.com/guides/lsst/ch03sec02.html
关于shell的test操作符还有很多http://tldp.org/LDP/abs/html/fto.html
( ) 将command group 置于 sub-shell 去执行,也称 nested sub-shell。
{ } 则是在同一个 shell 内完成,也称为non-named command group。
补充一个: {} 还可以做变量扩展 {5..9} 或者 {abcd}e, 自己运行一下就知道效果啦
这两个差异很小,而且一般用不着,就不讲了。
那么这一对的括号加上了$符号后又变成了上面鬼东西呢?
当然,只有:$( ) 与${ }才是合法的。
在 bash shell 中,$( ) 与` ` (反引号) 都是用来做命令替换用(command substitution)的。
在操作上,用$( ) 或` ` 都无所谓,用$( )的优点是:
1, ` ` 很容易与' ' ( 单引号)搞混乱,尤其对初学者来说
2, 在多层次的复合替换中,` ` 须要额外的跳脱( \` )处理,而$( ) 则比较直观
再让我们看${ } 吧... 它其实就是用来作变量替换用的啦。
一般情况下,$var 与${var} 并没有啥不一样。
但是用${ } 会比较精确的界定变量名称的范围,比方说:
[code][/code]
$ A=B
$ echo $AB
还可以用来截取变量,这个就很多花样啦
# 是去掉左边(在鉴盘上# 在$ 之左边)
% 是去掉右边(在鉴盘上% 在$ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配
然后我们看看两对的括号:
nub=$((i%4)) 等价于$nub=`expr $i % 1` ;
((i++)) 等价于$i=`expr $i + 1` ;
所以(())就是用来计算的,而且里面的变量不需要$来标记啦
(在 $(( )) 中的变量名称,可于其前面加$ 符号来替换,也可以不用)
在(())前面加上$只是为了把计算结果给保存而已。
而两个中括号和两个大括号都是不合法的!