bash|bash [[]] [] {} () 区别

()和{}都是把命令组合一起,形成一个命令组。区别是()是起子进程,而{}是当前进程,尤其在命令组中赋值非常重要。 另外一个区别就是{}中两边要有空格,并且每条命令带;比如:{ commanda; commandb; }
[]和test命令一样,可以用来比较数值,字符或者判断:

[ "$var" = 123 ] 判断是否是字符串123
[ "$var" -eq 123 ] 判断是否是数字123
[ -e "$var" ] 判断是否文件存在
[[]]可以认为是[]的增强版。可以将多个命令组合起来,比如:
[[ "$var1" = "$var2" ]] && echo "0" || echo "1"

区别
数字测试: -eq -ne -lt -le -gt -ge,[[ ]]同 [ ]一致
文件测试: -r、-l、-w、-x、-f、-d、-s、-nt、-ot,[[ ]]同 [ ]一致
字符串测试: > < =(同==) != -n -z,不可使用“<=”和“>=”,[[ ]]同 [ ]一致,但在[]中,>和<必须使用\进行转义,即>和<
逻辑测试: []为 -a -o ! [[ ]] 为&& || !
数学运算: [] 不可以使用 [[ ]]可以使用+ - * / %
组合: 均可用各自逻辑符号连接的数字(运算)测试、文件测试、字符测试
【bash|bash [[]] [] {} () 区别】(()) 数值计算

    推荐阅读