Bash表达式与模式匹配全解析
1. 表达式基础
表达式是用于计算值的公式。Bash有多个内置命令和函数来计算表达式,不同的命令和函数语法和特性有所不同,有时同一表达式有多种计算方式,且存在一些特殊特性用于罕见情况,所以很少有Bash程序员能记住所有细微差别。
2. 扩展类型
Bash中的表达式不仅包含算术运算,还涉及字符串替换,这个过程称为扩展。Bash将扩展分为以下六类,且按固定顺序求值:
1. 文件名花括号扩展
2. 路径名波浪号扩展
3. 美元符号、变量和算术表达式
4. 命令替换(从左到右执行)
5. 单词分割(即通过空白字符或IFS变量内容分隔参数)
6. 路径名扩展(即路径名模式匹配)
扩展顺序很重要,可能会导致脚本出现微妙问题。例如,在变量中使用带波浪号的路径时:
$ ls -d ~/tmp /home/kburtch/tmp $ TEMP="~/tmp" $ ls $TEMP ~/tmp not found这是因为变量扩展在波浪号扩展之后,Bash先进行波浪号扩展,找不到波浪号后进行变量扩展,导致波浪号留在命令中,ls命令找不到目录。因此,变量赋值路径中不应使用波浪号,应使用HOME变量。
除上述扩展外,其他类型的扩展由命令处理,这些命令在Bash完成六种扩展后执行。有两个常见的内置命令用于解释表达式:
-test命令:检查多种条件并