变量替换
shell 的变量有着丰富的替换操作:
语法 | 作用 |
---|---|
${var} 或 $var | 变量值。 |
${var:-value} | 如果 $var 不为空( test -n $var ),使用 $var ;否则使用 value |
${var:=value} | 如果 $var 不为空,使用 $var ;否则将 value 赋给 $var ,并使用 value 。 |
${var:?value} | 如果 $var 不为空,使用 $var 的值。否则,打印 value 并退出( exit )。类似断言 $var 不为空。 |
${var:+value} | 如果 $var 不为空,则使用 value ,否则使用空。 |
${#var} | 返回变量 $var 的长度。 |
变量替换之删除指定字符串
语法 | 作用 |
---|---|
${var#pattern} | 将 $var 的值从左侧删除与模式 pattern 匹配的最短字符串并返回。 |
${var##pattern} | 将 $var 的值从左侧删除与模式 pattern 匹配的最长字符串并返回。 |
${var%pattern} | 将 $var 的值从右侧删除与模式 pattern 匹配的最短字符串并返回。 |
${var%%pattern} | 将 $var 的值从右侧删除与模式 pattern 匹配的最长字符串并返回。 |
小技巧:
#
表示左侧;%
表示右侧。
一个#
或%
表示最短;两个#
或%
表示最长。
变量值之替换
语法 | 作用 |
---|---|
${var/pattern/replace} | 将 $var 的值中第一个与模式 pattern 匹配的串替换为 replace 并返回。 |
${var/pattern} | 将 $var 的值中第一个与模式 pattern 匹配的串删除并返回。 |
${var//pattern/replace} | 将 $var 的值中所有与模式 pattern 匹配的串替换为 replace* 并返回。 |
${var/#pattern/replace} | 将 $var 的值开头与模式 pattern 匹配的串替换为 replace 并返回。 |
${var/%pattern/replace} | 将 $var 的值结尾与模式 pattern 匹配的串替换为 replace 并返回。 |
变量值之大小写转换
语法 | 作用 |
---|---|
${var^pattern} | 将 $var 值开头与模式 pattern 匹配的串转换为大写。如果模式 pattern 省略,则将首字母转换为大写。 |
${var^^pattern} | 将 $var 值中所有与模式 pattern 匹配的串转换为大写。如果模式 pattern 省略,则将整个 $var 转换为大写。 |
${var,pattern} | 将 $var 值开头与模式 pattern 匹配的串转换为小写。如果模式 pattern 省略,则将首字母转换为小写。 |
${var,,pattern} | 将 $var 值中所有与模式 pattern 匹配的串转换为小写。如果模式 pattern 省略,则将整个 $var 转换为小写。 |
变量值之部分截取
语法 | 作用 |
---|---|
${var:pos} | 返回 $var 值从 pos 开始(到结尾)的子字符串。 |
${var:pos:len} | 返回 $var 值从 pos 开始长度为 len 的子字符串。 |
pos
可以取负值,表示从右侧开始。