字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

str='这是单引号'

需要注意的是:
1.单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,

name="张三"
str='我的名字叫${name}'
echo  $str
#他的输出是:我的名字叫${name}


2.单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号

str="这是双引号"

在双引号中,可以出现变量,可以出现转义字符

name="张三"
str="我的名字叫${name}"
echo  $str
#他的输出是:我的名字叫张三
name='张三'
str="我的名字叫\"$name\"。\n"
echo -e $str
#他的输出是:我的名字叫"张三"。

转义字符补充

转义字符意义ASCII码值(十进制)
\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\\代表一个反斜线字符''\'092
\'代表一个单引号(撇号)字符039
\"代表一个双引号字符034
\?代表一个问号063
\0空字符(NUL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符十六进制

拼接字符串

name="张三"
# 使用双引号拼接
str="我的名字叫"$name"!"
str_1="我的名字叫${name}!"
echo $str  $str_1
# 使用单引号拼接
str_2='我的名字叫'$name'!'
str_3='我的名字叫${name}!'
echo $str_2  $str_3
:<<!
他们的输出分别是:
我的名字叫张三! 我的名字叫张三!
我的名字叫张三! 我的名字叫${name}!
!

获取字符串的长度

string="abcd"
echo ${#string}
#输出结果为4

提取子字符串

#第一个字符的索引值为 0。
string="runoob is a great site"
echo ${string:1:4} #从字符串第 2 个字符开始截取 4 个字符,
#输出结果为unoo

查找子字符

#查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
string="runoob is a great site"
echo `expr index "$string" io`  #这里是反引号“`”而不是单引号“'”
#输出结果为4

补充:

变量截取

url="https://blog.amxsf.com/learn/shell/165.hmtl"
#从左边第0个字符开始,截取到第五个字符。
echo ${url:0:5}
#从左边第8个字符开始,一直截取到结束。
echo ${var:8}
#从右边算起第8个字符开始,截取后面的3个字符。
echo ${url:0-8:3}
#从右边第8个字符开始,一直截取到结束。
:<<!
运行结果如下:
https
blog.amxsf.com/learn/shell/165.hmtl
165
165.hmtl
!

变量截取符

#:表示从左边开始删除;一个 # 表示从左边删除到第一个指定的字符;两个 # 表示从左边删除到最后一个指定的字符。
%:表示从右边开始删除;一个 % 表示从右边删除到第一个指定的字符;两个 % 表示从左边删除到最后一个指定的字符

url="https://blog.amxsf.com/learn/shell/165.hmtl"
#从左边开始删除第一个//号及左边的所有字符,保留右边的字符。
echo ${url#*//}
#从左边开始删除,到最后一个/号及左边的所有字符,保留右边的字符。
echo ${url##*/}
#从右边开始,删除第一个/号及右边的字符,保留左边字符
echo ${url%/*}
#从右边开始删除,到最后一个/号及右边的字符,保留左边字符
echo ${url%%/*}
:<<!
运行结果如下:
blog.amxsf.com/learn/shell/165.hmtl
165.hmtl
https://blog.amxsf.com/learn/shell
https:
!
浮生一梦君同我,都是槐安未醒人
最后更新于 2021-01-20