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 |