符号$后的括号

 ${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。
 $(cmd) 命令替换,和`cmd`效果相同,结果为shell命令cmd的输,某些Shell版本不支持$()形式的命令替换, 如tcsh。
 $((expression)) 和`exprexpression`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算。

单括号()

 另开命令组——小括号中的内容会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无空格
 得到命令输出——a=$(command), 等同于a=$`command`,得到命令输出传递给变量a
 初始化数组——array=(a b c d)

双括号(())

 省去$符号的算术运算—— for((i=0;i<5;i++)); if (($i<5)); a=5; ((a++)) 可将 $a 重定义为6;括号内支持多个表达式用逗号分开。 
 C语言规则运算——$((exp)),exp为符合C语言规则的运算符、表达式
 跨进制运算——二进制、八进制、十六进制运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

单中括号[ ]

 字符串比较——==和!=
 整数比较——不等于:-gt:大于;-lt :小于;-eq:等于;-ne
 数组索引——array[0]

双中括号[[]]

 字符串比较——可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
 逻辑运算符——防止脚本许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
 退出码——bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

if ($i<5)      
if [ $i -lt 5 ]      
if [ $a -ne 1 -a $a != 2 ]      
if [ $a -ne 1] && [ $a != 2 ]      
if [[ $a != 1 && $a != 2 ]]      
       
for i in $(seq 0 4);do echo $i;done      
for i in `seq 0 4`;do echo $i;done      
for ((i=0;i<5;i++));do echo $i;done      
for i in {0..4};do echo $i;done    

大括号

 创建匿名函数——不会新开进程,括号内变量余下仍可使用。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。
 特殊替换

    [replace](./var_replace.md.html)