bash中容易搞混的几种括号运算符

$()

取得括号内运行命令的标准输出,作为当前命令行的命令或参数,其效果和``相同。
举例:mkdir $(date +%F)

$(())

执行整数运算。作用和let相似
举例:var=$((10+20))
另一种整数运算符$[]现已被标记为过时,会在将来版本中移除。

(())

可在其中使用直观的数学比较运算符,比test命令的选项 -lt -gt等要直观。
举例:

root@debian:~# (( 1 > 0 )) && echo yes
yes
root@debian:~# (( 1 > 10 )) && echo yes
root@debian:~#

[[]]

test命令或[的增强版,bash专有扩展,在sh中不支持。可以用扩展正则表达式或通配符来比较字符串。
举例:正则表达式:

root@debian:~# [[ "123456" =~ ^[0-9]+$ ]] && echo yes
yes
root@debian:~# [[ "123456X" =~ ^[0-9]+$ ]] && echo yes
root@debian:~#

举例:通配符:

root@debian:~# [[ 'abc.txt' == abc.* ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.txt ]] && echo yes
yes
root@debian:~# [[ 'abc.txt' == *.jpg ]] && echo yes
root@debian:~#

经测试等号右边的模式不能用引号括起来,否则会识别失败