颜林林的个人网站

关于bash变量的使用技巧

2024-07-30 14:07

注:详细可参考 man bashParameter ExpansionPattern Matching


首先,初始化如下变量:

1
VAR="aaabbbccc"

常规的引用,可使用花括号,也可以(在不引起歧义的情况下)不使用花括号:

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
echo ${#VAR}  # 9

去掉前缀:

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(替换全部)

相关文章