1. 字符串的形式 在shell中字符串有三种形式: 1.由单引号’ "包围的字符串 任何字符都会原样输出,在其中使用变量是无效 字符串中不能出现单引号,即使对单引号进行转义也不行 2.由双引号" "包围的字符串 如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出 字符串中可以出现双引号,只要它被转义了就行 3.不被引号包围的字符串 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样 字符串中不能出现空格,否则空格后面的字符串会作为其他变量或者的命名解析具体区别演示: #!/bin/bash #!/bin/bash n=88 str1=www.baidu.com$n str2="shell "stript" $n" str3="你好 $n" echo $str1 echo $str2 echo $str3 str1中包含了 $n,它被解析为变量n的引用。 $n 后边有空格,紧随空格的是str2 ;Shell将str2解释为一个新的变量名,而不是作为字符串str1的一部分。 str2中包含了引号,但是被转义了(由反斜杠 开头的表示转义字符) 。str2中也包含了 $n,它也被解析为变量n的引用。str3中也包含了 $n,但是仅仅是作为普通字符,并没有解析为变量n的引用。 2. 获取字符串长度 #str 获取字符串长度#!/bin/bash str="http://www.baidu.com/shell" echo ${#str} 3. shell字符串拼接 在shell中不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接(也称连接、合并) #!/bin/bash name="shell" url="http://www.taobao.com" 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 在str1中 $name 和 $url之间之所以不能出现空格,是因为当字符串不被任何一种引号包围时,遇到空格就认为字符串结束了,空格后边的内容会作为其他变量或者命令解析。 Shell这种拼接字符串的方式和Python非常类似,Python既支持用+拼接字符串,也支持将两个字符串放在一起。 4. shell字符串截取 shell截取字符串通常有两种方式: 从指定位置开始截取 从指定字符(子字符串)开始截取 4.1 从指定位置开始截取 这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。 既然需要指定起始位置,那么就涉及到计数方向的问题,到底是从字符串左边开始计数,还是从字符串右边开始计数。答案是Shell同时支持两种计数方式。 1)从字符串左边开始计数 格式:${string: start: length} sting是要截取的字符串; start是起始位置(从左边开始,从0开始计数); length是要截取的长度(省略的话表示截到字符串的末尾 2)从字符串右边开始计数格式: ${string: 0-start :length} 同上面格式相比,这种格式仅仅多了0-,这是固定的写法,用来表示从字符串右边开始计数 注意:从左边开始计数时,起始数字为0;从右边开始计数时,其实数字为1; 不管从哪边开始计数,截取方向都是从左到右 4.2 从指定字符(子字符串)开始截取 这种截取方式无法指定字符串的长度,只能从指定字符截取到字符串末尾。 1)使用#号截取右边字符 使用#号可以截取指定字符(或者子字符串)右边的所有字符 格式:${string#*chars} string表示要截取的字符串 chars是指定的字符(或者子字符串) *是通配符的一种,表示任意长度的字符串 *chars连接起来表示:忽略左边的左右字符,直到遇到chars(chars不会被截取)注意:以上写法遇到第一个与指定字符匹配的字符就结束了 上图包含了好几个/,但是它遇到第一个/时就结束匹配了 如果希望直到最后一个指定字符再匹配结束,就可以使用## 具体格式:${string##*chars} 它会一直匹配到最后一个字符,然后选最近的,按照刚才的方式进行截取 2)使用%截取左边字符 使用%号可以截取指定字符(或者子字符串)左边的所有字符 格式:${string%chars*} 这里一定要注意*的位置 截取方式:截取chars左边的字符,忽略chars右边的字符(所以*在chars右侧)同样不会截取到指定字符chars 注意:这里的读取方式是从右往左匹配,直到遇到chars,截取它左边的字符 它遇到从右边开始的第一个指定字符就停止匹配了,如下图示例: 如果希望直到最后一个指定字符再匹配结束,就可以使用%%,具体格式: ${string%%chars*} 最后:一定要注意用#截取是从左向右读;用%截取时是从右向左读