版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86430421
系列目录与参考文献传送门: shell入门学习笔记-序章
字符串详解
三种字符串赋值方式
admindeMacBook-Pro:myshell admin$ n=521
admindeMacBook-Pro:myshell admin$ str1=hello$n str="the special charactor \'$\' at line $n"
admindeMacBook-Pro:myshell admin$ str1=hello$n str2="the special charactor \'$\' at line $n"
admindeMacBook-Pro:myshell admin$ str3='no special charactors $n'
admindeMacBook-Pro:myshell admin$ echo ${str1}
hello521
admindeMacBook-Pro:myshell admin$ echo ${str2}
the special charactor \'$\' at line 521
admindeMacBook-Pro:myshell admin$ echo ${str3}
no special charactors $n
admindeMacBook-Pro:myshell admin$ str3='\"hh\"'
admindeMacBook-Pro:myshell admin$ echo $str3
\"hh\"
admindeMacBook-Pro:myshell admin$ str3='\'ss\''
>
- 不使用引号的字符串
str1=hello$n
- 其中出现的变量会被解析,如
$n
- 字符串不能包含空格,否则后续字符串将作为其他变量或者字符串解析
- 其中出现的变量会被解析,如
- 使用双引号的字符串
str="the special charactor \'$\' at line $n"
- 变量会被解析
- 字符串内可以使用单引号
- 使用单引号的字符串str3=‘no special charactors’
- 字符串不被解析
- 字符串内不可以使用单引号
获取字符串长度
admindeMacBook-Pro:myshell admin$ echo ${str3}
no special charactors $n
admindeMacBook-Pro:myshell admin$ echo ${#str3}
24
字符串拼接
admindeMacBook-Pro:myshell admin$ name="hanchao"
admindeMacBook-Pro:myshell admin$ age=99
admindeMacBook-Pro:myshell admin$ str1=$name$age
admindeMacBook-Pro:myshell admin$ str2=$name" "$age
admindeMacBook-Pro:myshell admin$ str3="$name $age"
admindeMacBook-Pro:myshell admin$ str4="name:$name,age:${age}"
admindeMacBook-Pro:myshell admin$ echo $str1
hanchao99
admindeMacBook-Pro:myshell admin$ echo $str2
hanchao 99
admindeMacBook-Pro:myshell admin$ echo $str3
hanchao 99
admindeMacBook-Pro:myshell admin$ echo $str4
name:hanchao,age:99
- shell字符串拼接,直接将字符串紧挨放在一起即可。
- 一定注意空格会分割字符串
- 建议所有字符串都通过双引号包起来
字符串指定长度截取
admindeMacBook-Pro:myshell admin$ str=0123456789
admindeMacBook-Pro:myshell admin$ echo ${str: 3: 4} #从左边开始,则最左边元素的索引为0
3456
admindeMacBook-Pro:myshell admin$ echo ${str: 3} #如果没有截取长度参数,则默认截取至末尾
3456789
admindeMacBook-Pro:myshell admin$ str=987654321
admindeMacBook-Pro:myshell admin$ echo ${str: 0-3: 4}
321
admindeMacBook-Pro:myshell admin$ echo ${str: 0-3: 2} #从右边开始,则最右边元素的索引为1
32
admindeMacBook-Pro:myshell admin$ echo ${str: 0-3}
321
- 正向字符串截取格式:
${string: begin: length}
- 反向字符串截取格式:
${string: 0-begin: length}
- 从左边开始,则最左边元素的所有为0
- 从右边开始,则最右边元素的所有为1
- 如果没有截取
length
参数,则默认截取至末尾
字符串截取子字符串
admindeMacBook-Pro:myshell admin$ url="http://www.abc.com/1.html"
admindeMacBook-Pro:myshell admin$ echo "${url#http://}"
www.abc.com/1.html
admindeMacBook-Pro:myshell admin$ echo "${url#*:}"
//www.abc.com/1.html
admindeMacBook-Pro:myshell admin$ echo "${url#*/}"
/www.abc.com/1.html
admindeMacBook-Pro:myshell admin$ echo "${url##*/}"
1.html
admindeMacBook-Pro:myshell admin$ echo "${url%1.html}"
http://www.abc.com/
admindeMacBook-Pro:myshell admin$ echo "${url%/*}"
http://www.abc.com
admindeMacBook-Pro:myshell admin$ echo "${url%%/*}"
http:
- 正向子字符串截取:
${string#*chars}
- 反向子字符串截取:
${string#chars*}
- 如果不带
*
则表示是全子字符串截取,如果带*
,则*
表示任意长度的字符串。 - 单个
#
和单个%
只截取至第一个匹配的字符串。 - 两个
#
和两个%
截取至最后一个匹配的字符串。
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string%*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
${string%%*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |