拼接

Shell中字符串的拼接不同于其他语言,如Java和JavaScript中可以使用“+”进行拼接,PHP中可以使用“.”进行拼接,在Shell中字符串拼接不需要任何运算符,只要将两个字符串直接写在一起即可。在拼接时要注意字符串的三种表示形式对引号、空格、分号处理的不同。

num=123
str="num"
str1=show\ $str:$num\;
str2="show "$str:$num\;
str3="show "$str:$num';'
str4="show $str:$num;"
str5=show\ $str":"$num\;
str6="show ${str}:$num;"

以上str1-str6输出相同:

show num:123;

截取

Shell中截取字符串的方式可分为按位置截取和按字符截取两类。

按位置

1.从左边计算起始位置:

${variable_name: start[ :length]}

 其中variable_name是要截取的字符串变量名,start是其实位置,从0开始计数,length是要截取的长度,如果省略或者从start到末尾的长度小于length,则截取到末尾。

url=
echo ${url:8:4}
echo ${url:8:15}
echo ${url:8}

输出为:

blog
blog.csdn.net/
blog.csdn.net/

 2.从右边计算起始位置:

${variable_name: 0-start[ :length]}

与从左边计算起始位置不同的是,start前多了“0-”,且start是从1开始计数,如果传入0则会从左边计算起始位置。不论从左还是从右计算起始位置,截取的方向都是从左向右截取。

url=
echo ${url:0-0:5}
echo ${url:0-9:4}
echo ${url:0-9:15}
echo ${url:0-9}

输出为:

https
csdn
csdn.net/
csdn.net/

按字符

1.截取右边字符:

${variable_name#[#]*chars}

其中variable_name是要截取的字符串变量名,chars是指定的字符或字符串,“*”是通配符表示任意长度的字符串。“#”可以是一个也可以是两个,当只有一个“#”时,从遇到的第一个chars开始向右截取,直到字符串末尾,如果有两个“#”,则表示从最后一个chars开始向右截取,直到字符串末尾。截取结果不包含chars。

url=
echo ${url#*.}
echo ${url##*.}

输出为:

csdn.net/
net/

2. 截取左边字符:

${variable_name%[%]chars*}

与“#”不同的是“%”截取chars左边的字符,只有一个“%”时,从字符串开始截取到右边起第一次出现的chars为止,有两个“%”时,从字符串开始截取到右边起最后一次出现的chars为止。

url=
echo ${url%.*}
echo ${url%%.*}

输出为:

https://blog.csdn
https://blog

 汇总

格式

描述

${variable_name:start:length}

从variable_name字符串的左边第start个位置开始(从0开始计数),向右截取length个字符(最多到末尾)。

${variable_name:start}

从variable_name字符串的左边第start个位置开始(从0开始计数),直到末尾。

${variable_name:0-start:length}

从variable_name字符串的右边第start个位置开始(从1开始计数),向右截取length个字符(最多到末尾)。

${variable_name:0-start}

从variable_name字符串的右边第start个位置开始(从1开始计数),直到末尾。

${variable_name#*chars}

从variable_name字符串左边起第一次出现的chars开始,截取chars右边所有的字符(不包含char)。

${variable_name##*chars}

从variable_name字符串左边起最后一次出现的chars开始,截取chars右边所有的字符(不包含chars)。

${variable_name%chars*}

从variable_name字符串开始截取到右边起第一次出现的chars为止的所有字符(不包含chars)。

${variable_name%%chars*}

从variable_name字符串开始截取到右边起最后一次出现的chars为止的所有字符(不包含chars)。

长度

Shell中获取字符串长度的方法为:${#variable_name}。variable_name为字符串变量名。与使用变量时不同,获取字符串长度时大括号“{}”不能省略,否则会将$#解析为特殊变量,然后将variable_name作为字符串的值输出。

url=
echo ${#url}
echo $#url

 输出结果为:

22
0url