先定义如下变量用于测试:
$ mypath='/usr/bin/wget'
$ tmpStr='root:x:0:0:root:/root:/bin/bash'
字符串切片
${var:offset:number}
取 var 字符串变量偏移 offset 位后 number 长度的字符串。
示例
例 1:向右偏移 4 位再切片 4 位。
$ echo ${mypath:4:4}
/bin
例 2:向右偏移 4 位再切片到末尾。
$ echo ${mypath:4}
/bin/wget
例 3:向左偏移 4 位再切片到右边末尾。
$ echo ${mypath: -4}
wget
注意,偏移量为负数时前面需有一个空格。
例 4:向左偏移 8 位向右切片 3 位。
$ echo ${mypath: -8:3}
bin
基于模式取子串
${var#*word}
其中 word 可以是指定的任意字符,自左而右,删除字符串开头至第一次出现 word 字符之间的所有字符。
${var##*word}
其中 word 可以是指定的任意字符,自左而右,删除字符串开头至最后一次出现 word 字符之间的所有字符。
${var%word*}
其中 word 可以是指定的任意字符,自右而左,删除字符串尾部至第一次出现 word 字符之间的所有字符。
${var%%word*}
其中 word 可以是指定的任意字符,自右而左,删除字符串尾部至最后一次出现 word 字符之间的所有字符。
示例
例 1:自左向右删除字符串开头到第一次出现 /
的位置。
$ echo ${mypath#*/}
usr/bin/wget
例 2:自左向右删除字符串开头到最后一次出现 /
的位置。
$ echo ${mypath##*/}
wget
例 3:自右向左删除字符串尾部到第一次出现 /
的位置。
$ echo ${mypath%/*}
/usr/bin
例 4:自右向左删除字符串尾部到最后一次出现 /
的位置。
$ echo ${mypath%%/*}
查找替换
${var/pattern/substi}
在指定的 var 字符串中查找到第一次被 pattern 匹配的部分,用 substi 替换之。
${var//pattern/substi}
在指定的 var 字符串中查找到所有被 pattern 匹配的部分,用 substi 替换之。
${var/#pattern/substi}
在指定的 var 字符串中查找行首被 pattern 匹配的部分,用 substi 替换之。
${var/%pattern/substi}
在指定的 var 字符串中查找行尾被 pattern 匹配的部分,用 substi 替换之。
示例
例 1:替换字符串中第一个 root
为 ROOT
。
$ echo ${tmpStr/root/ROOT}
ROOT:x:0:0:root:/root:/bin/bash
例 2:替换字符串中所有 root
为 ROOT
。
$ echo ${tmpStr//root/ROOT}
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
例 3:替换字符串中行首的 root
为 ROOT
。
$ echo ${tmpStr/#root/ROOT}
ROOT:x:0:0:root:/root:/bin/bash
例 4:替换字符串中行尾的 bash
为 BASH
。
$ echo ${tmpStr/%bash/BASH}
root:x:0:0:root:/root:/bin/BASH
查找删除
${var/pattern}
在指定的 var 字符串中查找到第一次被 pattern 匹配的部分,删除之。
${var//pattern}
在指定的 var 字符串中查找到所有被 pattern 匹配的部分,删除之。
${var/#pattern}
在指定的 var 字符串中查找行首被 pattern 匹配的部分,删除之。
${var/%pattern}
在指定的 var 字符串中查找行尾被 pattern 匹配的部分,删除之。
示例
例 1:删除字符串中第一次出现的 root
。
$ echo ${tmpStr/root}
:x:0:0:root:/root:/bin/bash
例 2:删除字符串中所有的 root
。
$ echo ${tmpStr//root}
:x:0:0::/:/bin/bash
例 3:删除字符串中行首的 root
。
$ echo ${tmpStr/#root}
:x:0:0:root:/root:/bin/bash
例 4:删除字符串中行尾的 bash
。
$ echo ${tmpStr/%bash}
root:x:0:0:root:/root:/bin/
大小写转换
${var^^}
把 var 字符串中的所有小写字母转为大写。
${var,,}
把 var 字符串中的所有大写字母转为小写。
示例
例 1:把字符串中所有小写字母转大写。
$ echo ${mypath^^}
/USR/BIN/WGET
例 2:把字符串中所有大写字母转小写。
$ tmpStr2=`echo ${mypath^^}`
$ echo $tmpStr2
/USR/BIN/WGET
$ echo ${tmpStr2,,}
/usr/bin/wget
变量赋值
${var:-value}
如果 var 为空或未设置,则返回 value 的值,否则,返回 var 的值。
${var:=value}
如果 var 为空或未设置,则返回 value 的值,并且把 value 的值赋值给 var,否则,返回 var 的值。
${var:+value}
如果 var 不为空,则返回 value 的值。
${var:?error_info}
如果 var 为空或未设置,通过错误输出流返回错误信息。
示例
例 1:有变量 var1
不为空,var2
为空,输出 var2
,为空时返回 var1
的值,查看 var2
。
$ var1='value1'
$ echo ${var2:-$var1}
value1
$ echo $var2
例 2:有变量 var1
不为空,var2
为空,输出 var2
,为空时返回 var1
的值,并把 var1
的值赋给 var2
,查看 var2
。
$ var1='value1'
$ echo ${var2:=$var1}
value1
$ echo $var2
value1
例 3:有变量 var1
、var2
都不为空,输出 var1
,不为空时返回 var2
。
$ var1='value1'
$ var2='value2'
$ echo ${var1:+$var2}
value2
$ unset var1
$ echo ${var1:+$var2}
例 4:输出一个不存在的变量 var3
,返回错误信息。
$ echo ${var3:?error_info}
-bash: var3: error_info
评论区