(五)shell字符串深入解析
(1)基本用法
1) 由单引号' '
包围的字符串:
- 任何字符都会原样输出,在其中使用变量是无效的。
- 字符串中不能出现单引号,即使对单引号进行转义也不行。
2) 由双引号" "
包围的字符串:
- 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
- 字符串中可以出现双引号,只要它被转义了就行。
3) 不被引号包围的字符串
- 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号
" "
包围的字符串一样。 - 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。
#!/bin/bash #单引号有问题 n=56 a1=num=$n a2='num=$n' a3="num=$n" echo $a1 echo $a2 echo $a3 #无引号有问题 #b1=china is nice b2='china is nice' b3="china is nice" echo $b1 echo $b2 echo $b3 #获取字符串长度 c1="super star is reba" echo ${#c1}
结果:
(2)字符串截取
#!/bin/bash #字符串拼接 两个str放在一起 a1="迪丽热巴" a2="欧阳图图" b1=$a1$a2 b2='$a1 and $a2' b3="$a1 and $a2" b4=a1':'a2 echo $b1 echo $b2 echo $b3 echo ---------------------- #通过位置截取 #与python的切片类似 # ${截取的字符串:起始位置从0开始:截取的长度} #左边往后: ${string:start:length} #右边往后: ${string:0-start:length} c1="the star in my heart is reba" c2="迪丽热巴" echo ${c2:2:2} echo ${c1:3:10} echo ${c2:0-2:4} echo ${c1:0-3:10} #并没有正在截取到原字符串 echo $c2 echo $c1 echo ---------------------- #通过指定字符截取 # ${截取的字符串#*指定字符} # #:表示可以截取指定字符右边所有的字符 # *:通配符,表示任意长度的字符串 echo ${c1#star} echo ${c1#*star} echo ${c2#热} echo ${c2#*热} echo ---------------------- url="https://www.cnblogs.com/oytt/p/13398266.html" url2="rr=aa==tt===aa++99" echo ${url#*/} #遇到第一个匹配结束 echo ${url##*/} #遇到最后一个匹配结束 echo ${url2#*aa} echo ${url2##*aa} echo ---------------------- #通过%截取左边字符 # ${string%chars*} echo ${url%/*} #遇到第一个匹配结束 echo ${url%%/*} #遇到最后一个匹配结束 echo ${url2%aa*}
来自shell的随笔均参考自 http://c.biancheng.net/view/1114.html
做一个优秀的程序媛