BASH 参数名展开${}

BASH 参数名展开${}

${}的全名是:参数展开(Parameter Expansion),对参数做操作的语法。对某个“参数”进行加工后再取值。

这里的参数包括:普通变量、位置参数、数组、特殊变量(#, *, @ )

第一类:明确边界,告诉bash变量名到哪里结束

  • ${var}
  • ${var[0]}
  • ${10}(位置参数,$0命令名,$1第一个位置参数,当超过9时就必须使用花括号,不然会被解析成$1和0)

用于区分字符串中哪些字符是变量。

第二类:字符串处理

功能写法记忆
切片${var:起点:长度}像 Python
长度${#var}#= count,注意区分前缀删除
替换${var/old/new}/= replace
贪婪替换${var//old/new}//= 全部
前缀删除${var#pattern}#= 删除包含pattern在内左边内容
后缀删除${var%pattern}%= 删除包含pattern在内右边内容

表格中贪婪替换使用了双斜线“//”,表示替换所有。下面的前、后缀删除也同样适用“贪婪”删除“##”“%%”,其中的pattern是“Filename Expansion Pattern(文件名通配符)”

文件名通配符

符号含义
*任意长度任意字符
?任意一个字符
[abc]a / b / c 之一
[a-z]一个范围
[^a-z]/ [!a-z]不在范围内

第三类:赋值/容错

写法含义
${var:-default}未定义或为空 → default
${var:=default}未定义或为空 → 赋值
${var:?error_message}未定义 → 报错退出
${var:+value}已定义 → value

Comments are closed.