[TOC] >[success] # 字符串 ~~~ 1.字符串可以由单引号' '包围,也可以由双引号" "包围,也可以不用引号 ~~~ >[danger] ##### 各个符号包裹的区别 ~~~ 1.由单引号' '包围的字符串:任何字符都会原样输出,在其中使用变量是无效的。 2.由双引号" "包围的字符串:如果其中包含了某个变量,那么该变量会被解析 (得到该变量的值),而不是原样输出 3.不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。 ~~~ >[danger] ##### 案例 ~~~ #!/bin/bash str1=1 str2="双引号$str1" str3='单引号$str1' str4=$str1 echo $str1 echo $str2 echo $str3 echo $str4 ~~~ * 打印结果 ~~~ 1 双引号1 单引号$str1 1 ~~~ >[danger] ##### 字符长度 ~~~ 1.${#变量}获取字符串变量长度 #!/bin/bash str=12345678 echo ${#str} # 8 ~~~ >[danger] ##### 字符串拼接 ~~~ 1.在 shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接,也就是说不用 像js 用加号拼接 ~~~ * 案例 ~~~ #!/bin/bash name="Shell" url="/d/file/202003/hvdnfj3peuw1227.html str1=$name$url #中间不能有空格 str2="$name $url" #如果被双引号包围,那么中间可以有空格 str3=$name": "$url #中间可以出现别的字符串 str4="$name: $url" #这样写也可以 str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号 echo $str1 echo $str2 echo $str3 echo $str4 echo $str5 运行结果: Shellhttp://c.biancheng.net/shell/ Shell http://c.biancheng.net/shell/ Shell: http://c.biancheng.net/shell/ Shell: http://c.biancheng.net/shell/ ShellScript: http://c.biancheng.net/shell/index.html ~~~ [# Shell字符串拼接(连接、合并)案例来自](http://www.beylze.cn/shell/710.html) >[danger] ##### Shell字符串截取 ~~~ 1.字符串截取语法: '${string: start :length}',string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计 数),length 是要截取的长度(省略的话表示直到字符串的末尾) 2.从右边开始计数:'${string: 0-start :length}','0-',这是固定的写法,专门用来表示从字符串右边开始计数 3.从左边开始计数时,起始数字是 0;从右边开始计数时,起始数字是 1 ~~~ * 案例 ~~~ #!/bin/bash str=abcde echo ${str:2:1} # c 从0开始找到c ,截取长度为1个 echo ${str:0-4:2} # bc 从右面开始数1为开始基数倒数四个是b截取两个bc ~~~ >[danger] ##### 字符串左右截取 ~~~ 1.使用 '#' 号截取'右'边字符'${string#*chars}',string 表示要截取的字符,chars 是指定的字符(或者子字符串), *是通配符的一种,表示任意长度的字符串。*chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取) 2.使用 '%' 截取'左'边字符'${string%chars*}',*的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符, 所以*应该位于 chars 的右侧 ~~~ * 案例 ~~~ #!/bin/bash url="/d/file/202003/udkeuovhfh41228.html echo ${url#*/} #结果为 /c.biancheng.net/index.html echo ${url##*/} #结果为 index.html str="---aa+++aa@@@" echo ${str#*aa} #结果为 +++aa@@@ echo ${str##*aa} #结果为 @@@ ~~~ ~~~ #!/bin/bash url="/d/file/202003/udkeuovhfh41228.html echo ${url%/*} #结果为 /d/file/202003/2sfzdx3oup31229.net echo ${url%%/*} #结果为 http: str="---aa+++aa@@@" echo ${str%aa*} #结果为 ---aa+++ echo ${str%%aa*} #结果为 --- ~~~ >[danger] ##### 截取的总结 | 格式 | 说明 | | --- | --- | | ${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 左边的所有字符。 | >[info] ## 参考来源 [Shell字符串截取](http://www.beylze.cn/shell/711.html)