在bash环境中,所有变量默认都是字符串类型。但可使用declare设置其他属性。
在Shell中字符串可以以三种形式定义
1. 单引号
使用单引号声明变量,变量值中引用其他变量不会被解析,直接将引用变量的名称作为声明变量值的一部分。
2. 双引号
使用双引号声明变量,变量值中引用其他变量会被解析,会将引用变量的值作为声明变量值的一部分。
3.不使用引号
和使用双引号一样,引用变量会被解析,但是变量值中不能存在空格。
4.反单引号
可以执行命令,并将执行结果赋值给自定义变量。
date=`date +%Y%m%d.%H%M%S`
注意:在字符串值中引用其他变量时,推荐使用大括号“{}”,一方便阅读,二以免Shell认为“$”后字符串都为变量名称。
举例:vim /root/shell/stringvariables.sh
#!/bin/bash # 声明变量 名称 年龄 爱好 name=mslh age=2 hoppy=type # 使用单引号声明变量 var_a='名称:${name} 年龄:$age 爱好:$hoppy' echo $var_a # 使用双引号声明变量 var_b="名称:${name} 年龄:$age 爱好:$hoppy" echo $var_b # 不是用引号 var_c=名称:${name}_年龄:${age}_爱好:$hoppy echo $var_c var_d=名称:${name} 年龄:$age 爱好:$hoppy echo $var_d
执行
# sh stringvariables.sh 名称:${name} 年龄:$age 爱好:$hoppy 名称:mslh 年龄:2 爱好:type 名称:mslh_年龄:2_爱好:type stringvariables.sh: line 19: 年龄:2: command not found
获取字符串长度,使用${#变量名称}
echo '$var_a的长度是:'${#var_a}
截取字符串
格式 |
说明 |
${string:start:length} |
从string左侧start个字符开始(下标从0开始)向右截取length长度。 |
${string:start} |
从string左侧start个字符开始(下标从0开始)向右截取全部字符。 |
${string:0-start:length} |
从string右侧start个字符开始(下标从1开始)向右截取length长度。 |
${string:0-start} |
从string右侧start个字符开始(下标从1开始)向右截取全部字符。 |
${string#*chars} |
从string左侧开始第一次出现chars的位置,向右截取所有字符。 |
${string##*chars} |
从string左侧开始最后一次出现chars的位置,向右截取所有字符。 |
${string%chars*} |
从string右侧开始第一次出现chars的位置,向左截取所有字符。 |
${string%%chars*} |
从string右侧开始最后一次出现chars的位置,向左截取所有字符。 |
代码:vim /root/shell/subString.sh
#!/bin/bash appName=miselehe.com echo "字符串: ${appName}" # 从左开始起始位置为0 echo "从左侧第2个字符开始向右截取3个字符,预期值ise:"${appName:1:3} echo "从左侧第2个字符开始向右截取所有字符,预期值:iselehe.com:"${appName:1} # 从右侧开始起始位置为1 echo "从右侧第4个字符开始向右侧截取4个字符,预期值.com:"${appName:0-4:4} echo "从右侧第6个字符开始向右侧截取所有字符,预期值he.com:"${appName:0-6} echo "从左侧第一次出现e的地方向右截取所有字符串,预期值lehe.com:"${appName#*e} echo "从左侧最后一次出现e的地方向右截取所有字符串,预期值.com:"${appName##*e} echo "从右侧第一次出现e的地方向左截取所有字符串,预期值miseleh:"${appName%e*} echo "从右侧最后一次出现e的地方向左截取所有字符串,预期值mis:"${appName%%e*}
执行
# sh subString.sh 字符串: miselehe.com 从左侧第2个字符开始向右截取3个字符,预期值ise:ise 从左侧第2个字符开始向右截取所有字符,预期值:iselehe.com:iselehe.com 从右侧第4个字符开始向右侧截取4个字符,预期值.com:.com 从右侧第6个字符开始向右侧截取所有字符,预期值he.com:he.com 从左侧第一次出现e的地方向右截取所有字符串,预期值lehe.com:lehe.com 从左侧最后一次出现e的地方向右截取所有字符串,预期值.com:.com 从右侧第一次出现e的地方向左截取所有字符串,预期值miseleh:miseleh 从右侧最后一次出现e的地方向左截取所有字符串,预期值mis:mis