字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)
1 单引号方式
2 双引号方式, 推荐
3 不用引号方式
vim string.sh
#!/bin/bash
name1='james'
name2="kobe"
name3=paul
echo "name1: ${name1}"
echo "name2: ${name2}"
echo "name3: ${name3}"
1 使用单引号’'的字符串
任何字符都会原样输出,在拼接字符串中使用变量是无效的。
2 由双引号" "
包围的字符串
其中包含了变量,那么该变量会被解析得到值,而不是原样输出。
3 不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "
包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他命令解析。
demo:
vim string.sh
#!/bin/bash
name="kobe"
echo '使用单引号打印 name: ${name}'
echo "使用双引号打印 name: ${name}"
echo 不适用引号打印name:${name}
${#字符串变量名}
获取字符串长度
#!/bin/bash
name="kobe"
echo '使用单引号打印 name: ${name}'
echo "使用双引号打印 name: ${name}"
echo 不适用引号打印name:${name}
echo "字符串长度为: ${#name}"
1 无符号拼接
2 双引号拼接
#!/bin/bash
hello="hello"
world="world"
hello_world=${hello}${world}
echo "无符号拼接: ${hello_world}"
hello_world1="${hello}${world}"
echo "双引号拼接:${hello_world}"
格式 | 说明 |
---|---|
${变量名:start:length} | 从 string 字符串的左边第 start 个字符开始, 向右截取 length 个字符。start从0开始 |
${变量名:start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${变量名:0-start:length} | 从 string 字符串的右边第 start 个字符开始, 向右截取 length 个字符。start从1开始, 代表右侧第一个字符 |
${变量名:0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
${变量名#*chars} | 从 string 字符串左边第一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名##*chars} | 从 string 字符串左边最后一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名%chars*} | 从 string 字符串右边第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符。 |
${变量名%%chars*} | 从 string 字符串右边最后一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符 |
字符串"hello world"
从左侧第0个开始,向左截取2个字符
从左侧第5个开始,向左截取所有字符
从右侧第5个开始,向右截取2个字符
截取左边第一次出现字符l右边的所有字符
截取左边最后一次出现字符l右边的所有字符
截取右边第一次次出现字符l左边的所有字符
截取右边最后一次出现字符l左边的所有字符
#!/bin/bash
string="hello world"
echo "字符串为: ${string}"
str1="${string:0:2}"
echo "从左侧第0个开始,向左截取2个字符: ${str1}"
str2="${string:5}"
echo "从左侧第5个开始,向左截取所有字符: ${str2}"
str3="${string:0-5:2}"
echo "从右侧第5个开始,向右截取2个字符: ${str3}"
str4="${string#*l}"
echo "截取左边第一次出现字符l右边的所有字符: ${str4}"
str5="${string##*l}"
echo "截取左边最后一次出现字符l右边的所有字符: ${str5}"
str6="${string%l*}"
echo "截取右边第一次次出现字符l左边的所有字符: ${str6}"
str7="${string%%l*}"
echo "截取右边最后一次出现字符l左边的所有字符: ${str7}"