10、Shell字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
单引号
str='this is a string'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号
your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
拼接字符串
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
string="alibaba is a great company" echo ${string:1:4} #输出liba
删除子串
示例
[root@Centos8 ~]# DEL=abcABC123ABCabc [root@Centos8 ~]# echo $DEL abcABC123ABCabc
方式一:${string#substring},从开头, 删除最短匹配的子串
#删除开头最短匹配a*C子串 [root@centos8 ~]# echo ${DEL#a*C} 123ABCabc
方式二:${string##substring},从开头, 删除最长匹配的子串
#删除开头最长匹配a*C子串 [root@centos8 ~]# echo ${DEL##a*C} abc
方式三:${string%substring},从结尾删除最短匹配的子串
#删除开头最短匹配a*c子串 [root@centos8 ~]# echo ${DEL%a*c} abcABC123ABC
方式四:${string%%substring},从结尾删除最长匹配的子串
#删除开头长匹配a*c子串 [root@centos8 ~]# echo ${DEL%%a*c} <--#结果为空,全部匹配删除
替换子串
方法一:${string/substring/replacement},从开头替换第一个匹配子串
[root@centos8 ~]# echo ${DEL/abc/mmm}
mmmABC123ABCabc
(2)方法二:${string/%substring/replacement},从结尾替换第一个匹配子串
[root@centos8 ~]# echo ${DEL/%abc/mmm}
abcABC123ABCmmm
(3)方法三:${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
[root@centos8 ~]# echo ${DEL//abc/mmm} mmmABC123ABCmm
总结
字符串操作列表(长度,读取,替换,#是从开头开始,%是从结尾开始匹配)
表达式 | 含义 |
${#string} | $string的长度 |
${string:position} | 在$string中, 从位置$position开始提取子串(从0开始,类似cut -c) |
${string:position:length} | 在$string中, 从位置$position开始提取长度为$length的子串 |
${string#substring} | 从变量$string的开头, 删除最短匹配$substring的子串 |
${string##substring} | 从变量$string的开头, 删除最长匹配$substring的子串 |
${string%substring} | 从变量$string的结尾开始, 删除最短匹配$substring的子串 |
${string%%substring} | 从变量$string的结尾开始, 删除最长匹配$substring的子串 |
${string/substring/replacement} | 使用$replacement, 来代替第一个匹配的$substring |
${string//substring/replacement} | 使用$replacement, 代替所有匹配的$substring |