字符串可以由单引号‘ ‘包围,也可以由双引号" "包围,也可以不用引号。它们之间是有区别的。 下面我们说一下三种形式的区别: 1) 由单引号‘ ‘包围的字符串: 任何字符都会原样输出,在其中使用变量是无效的。 字符串中不能出现单引号,即使对单引号进行转义也不行。 2) 由双引号" "包围的字符串: 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。 字符串中可以出现双引号,只要它被转义了就行。 3) 不被引号包围的字符串 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。 字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析
获取字符串长度 str="http://www.beylze.com/d/file/20190908/25x2iutcciy.html" echo ${#str} 在 Shell 中获取字符串长度很简单,具体方法如下: ${#string_name} string_name 表示字符串名字。
字符串拼接 str1=$name$url #中间不能有空格 str2="$name $url" #如果被双引号包围,那么中间可以有空格 str3=$name": "$url #中间可以出现别的字符串 str4="$name: $url" #这样写也可以 str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
字符串截取 ${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左边所有字符。 [root@snow zc]# url="c.biancheng.net" [root@snow zc]# echo ${url: 2: 9} biancheng [root@snow zc]# url="c.biancheng.net" [root@snow zc]# echo ${url: 2} #省略 length,截取到字符串末尾 biancheng.net [root@snow zc]# url="c.biancheng.net" [root@snow zc]# echo ${url: 0-13: 9} biancheng [root@snow zc]# url="c.biancheng.net" [root@snow zc]# echo ${url: 0-13} #省略 length,直接截取到字符串末尾 biancheng.net [root@snow zc]# url="http://www.beylze.com/d/file/20190908/di4r5hss02g.html" [root@snow zc]# echo ${url#*:} //www.beylze.com/d/file/20190908/di4r5hss02g.html [root@snow zc]# echo ${url#*p:} //www.beylze.com/d/file/20190908/di4r5hss02g.html [root@snow zc]# echo ${url#*ttp:} //www.beylze.com/d/file/20190908/di4r5hss02g.html [root@snow zc]# echo ${url#http://} www.beylze.com/d/file/20190908/di4r5hss02g.html [root@snow zc]# echo ${url#*/} /www.beylze.com/d/file/20190908/di4r5hss02g.html [root@snow zc]# echo ${url##*/} di4r5hss02g.html [root@snow zc]# echo ${url%/*} http://www.beylze.com/d/file/20190908 [root@snow zc]# echo ${url%%/*} http: [root@snow zc]#
最后,我们对以上 8 种格式做一个汇总,请看下表:
格式 |
说明 |
${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 左边的所有字符。 |
从左边开始计数时,起始数字是 0(这符合程序员思维);从右边开始计数时,起始数字是 1(这符合常人思维)。计数方向不同,起始数字也不同。不管从哪边开始计数,截取方向都是从左到右。