shell 字符串(详细)

shell作为一门脚本语言,大部分工作主要用来处理文本,尤其是字符和字符串。字符串是shell中最经常使用的数据类型之一,shell中关于字符串的各种操作也最多,甚至还支持模式匹配、正则表达式等更加灵活和好用的功能。一个最简单的字符串使用示例如下:

#!/bin/bash

WEB=zhaixue.cc
STR1=hello $WEB
STR2='hello $WEB'
STR3="hello $WEB"

echo $STR1
echo $STR2
echo $STR3
echo "STR3 len: ${#STR3}"

shell中对脚本命令的解析,空格是一个非常重要的分隔符。一个字符串赋值给一个变量时,如果字符串之间有空格,记得一定要用单引号或双引号包起来,否则程序就会报错,如上面脚本中的STR1赋值:

root@pc:/home/demo# ./hello.sh 
./hello.sh: line 4: zhaixue.cc: command not found

hello $WEB
hello zhaixue.cc
STR3 len: 16

一个字符串使用单引号、双引号包起来,也是有区别的:使用单引号包起来的字符串,会原样输出;而使用双引号包起来的字符串,会解析使用$引用的变量,然后将变量的值打印出来。

想要获取一个字符串的长度,使用${#string}就可以获取string自妇产的长度。

字符串合并

shell支持将两个数组合并为一个新数组,也支持将两个字符串合并为一个新的字符串。

#!/bin/bash

HTTP=https
DOMAIN=www.zhaixue.cc

web1=$HTTP$DOMAIN
web2=$HTTP"://"$DOMAIN
web3="$HTTP://$DOMAIN"
web4="${HTTP}://${DOMAIN}"

echo $web1
echo $web2
echo $web3
echo $web4

脚本运行结果:

root@pc:/home/demo# ./hello.sh 
httpswww.zhaixue.cc
https://www.zhaixue.cc
https://www.zhaixue.cc
https://www.zhaixue.cc

字符串截取

shell支持字符串截取:从一个指定字符串中,截取部分字符,生成一个新的字符串。截取字符串的使用格式如下:

${string:position}
${string:position:length}

其中string是要截取的字符串,position表示起始位置(从左边开始计算,初始值为0),而length则是要截取的长度。

root@pc:/home/demo# cat hello.sh 
#!/bin/bash
string=www.zhaixue.cc
echo ${string:0}
echo ${string:4}
echo ${string:0:3}

root@pc:/home/demo# ./hello.sh 
www.zhaixue.cc
zhaixue.cc
www

如果没有指定,默认是截取从起始地址,直到字符串末尾的一段字符串。另外,shell还支持从字符串末尾开始作为起始点(从右边开始计算,初始起点为1),截取一段指定长度的字符串。

${string:0-position:length}

无论截取的起始地址从左边开始,还是从右边开始,但截取的方向是不变的,都是从左往右。

#!/bin/bash

string=www.zhaixue.cc

echo ${string:0-1}
echo ${string:0-4}
echo ${string:0-10:10}

脚本运行结果:

root@pc:/home/demo# ./hello.sh 
c
e.cc
zhaixue.cc
《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客