变量子串:
man bash,然后搜索:Parameter Expansion。
参数拓展
$字符引进、提出了参数拓展、命令替换和数字替换。变量名或标识被大括号包围才能够被拓展。
我们可以记住一个表:
序号 | 表达式 | 说明 |
1 | ${parameter} | 返回变量$parameter的内容。 |
2 | ${#parameter} | 返回变量$parameter内容的长度,按字符。 |
3 | ${parameter:offset} | 在变量$parameter中,从位置offset之后开始提取子串到结尾。 |
4 | ${parameter:offset:length} | 在变量$parameter中,从位置offset开始提取长度为length的子串。 |
5 | ${parameter#word} | 从变量$parameter开头开始删除最短匹配的word子串。 |
6 | ${parameter$$word} | 从变量$parameter开头开始删除最长匹配的word子串。 |
7 | ${parameter%word} | 从变量$parameter结尾开始删除最短匹配的word子串。 |
8 | ${parameter%%word} | 从变量$parameter结尾开始删除最长匹配的word子串。 |
9 | ${parameter/patten/string} | 使用string替换第一个匹配的pattern。 |
10 | ${parameter//pattern/string} | 使用string替换所有的匹配的pattern。 |
示例1:
[root@vm1 ~]# NAME="changchunhua"
[root@vm1 ~]# echo ${NAME}
changchunhua
[root@vm1 ~]# echo $NAME
changchunhua
示例2:
[root@vm1 ~]# echo ${#NAME}
12
说明:打印变量值的长度。这种方式效率是比较高的,在效率要求高的场合尽量多使用。
当然,日常工作中的脚本计算,可以根据自己擅长的或者易用的程度去选择。
示例3:
[root@vm1 ~]# echo ${NAME:5}
chunhua
说明:从第5个字符后面开始截取,默认是截取后面字符的全部。第5个字符不包含在内。也可以理解为将前面5个字符进行删除。
示例4:
[root@vm1 ~]# echo ${NAME:5:4}
chun
说明:4表示的是截取4个字符。