注:详细可参考 man bash
的 Parameter Expansion
和 Pattern Matching
首先,初始化如下变量:
常规的引用,可使用花括号,也可以(在不引起歧义的情况下)不使用花括号:
1
2
3
|
echo $VAR # aaabbbccc
echo ${VAR} # aaabbbccc
echo ${VAR}_123 # aaabbbccc_123(必须使用花括号,否则可能被解析为 VAR_123 变量)
|
缺省值:
1
2
3
4
5
6
7
8
9
10
|
echo ${VAR2} # (空值)
echo ${VAR2:-xyz} # xyz(返回该缺省字符串)
echo ${VAR2} # (仍是空值)
echo ${VAR2:=xyz} # xyz(返回该缺省字符串)
echo ${VAR2} # xyz(已被上一条语句赋值
echo ${VAR3:?abc} # -bash: VAR3: abc(此信息输出到stderr,并导致脚本退出)
echo ${VAR3:+abc} # (空值,仅当变量为空时才替换为缺省字符串)
echo ${VAR2:+abc} # abc(因 VAR2 此时非空)
|
切片:
1
2
3
4
5
6
7
|
# 两个数字,分别表示起始字符(从0计)和长度
echo ${VAR:3} # bbbccc
echo ${VAR:0:3} # aaa
echo ${VAR:3:4} # bbbc
echo ${VAR:5:3} # bcc
echo ${VAR:3:-1} # bbbcc(至末尾倒数第1个字符结束,不包括该字符)
echo ${VAR:3:-2} # bbbc(至末尾倒数第2个字符结束,不包括该字符)
|
字符长度:
去掉前缀:
1
2
3
4
5
|
echo ${VAR#a} # aabbbccc # 去掉前缀(一个字符)
echo ${VAR%c} # aaabbbcc # 去掉后缀(一个字符)
echo ${VAR##+(a)} # bbbccc # 去掉前缀(一个或多个字符,##表示尽可能匹配最长)
echo ${VAR%%+(c)} # aaabbb # 去掉后缀(一个或多个字符,%%表示尽可能匹配最长)
|
替换:
1
2
|
echo ${VAR/b/x} # aaaxbbccc(替换一次)
echo ${VAR//b/x} # aaaxxxccc(替换全部)
|