一、字符串变量定义与赋值
符号意义:
- :空测试 =>空为真
- - 负向测试 =>不存在为真
- + 正向测试 =>存在为真
- = 赋值
- ?有问题,错误
表达式 | 含义 | 示例 |
---|---|---|
var=string var='string' var="string" | 直接定义并赋值 string单引号包起来:原样输出 string双引号包起来:特殊符号和变量解析 | var=hello,world! =>hello,world! var=hello,world!\n =>错误 var="hello,world!\n" =>hello,world!(换行) |
var=$(cmd) var=`cmd` | 定义并取得命令返回值 | var=$(whereis ls) var=`whereis ls`(旧式写法) |
$var ${var} | 变量var的值 | echo $var echo "hello,${var}" |
${var-string} | 如果var没有被声明, 那么就以string作为其值 (var不被赋值) | echo ${var1-$var} =>hello,world! echo ${var1-'aaa'} =>aaa |
${var:-string} | 如果var没有被声明或其值为空, 那么就以string作为其值 (var不被赋值) | var1='' echo ${var1:-$var} =>hello,world! echo ${var1:-'aaa'} =>aaa |
${var:=string} | 如果var没有被声明或其值为空, 那么就以string赋值给var | echo ${var:='abs'} =>abs echo ${var} =>abs |
${var:?string} | 如果var没有被声明或其值为空, 那么以string作提示并终止脚本 | ${var2:?'不能为空'} =>var:不能为空 |
${var:+string} | 如果var没有被声明或其值为空, 则返回空,反之则返回string | echo ${var:?'不为空'} =>不能空 echo ${var2:+'不为空'} => |
二、字符串变量属性
#字符串长度 ${#var}
var="hello,world!"
echo ${#var} # 12
三、字符串运算
运算符 | 含义 | 示例 a="hello" b="hello,world!" |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] =>false |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] =>true |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] =>false |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n $a ] =>true |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] =>true |
=~ | 检测字符串是否包含(正则试算),包含返回为true | [ $b =~ $a ] =>true [[ $test =~ ^[0-9]+ ]] && echo 1 || echo 0 |
四、字符串拼接
#直接放到一起或用双引号即可,示例:
a=hello
b=world
c=$a$b # $c = helloworld
c=$a" "$b # $c = hello world
c="$a $b!" # $c = hello world!
五、字符串切片
表达式 | 含义 | 示例 var="hello,world!" |
---|---|---|
${var:n} | 取第n个字符后面的字符串 | echo ${var:3} =>lo,world |
${var:n:m} | 取第n个字符后面开始的m个字符 | echo ${var:3:5} =>lo,wo |
${var: -n} | 从末尾开始取n个字符,注意:与-之间的空格 | echo ${var: -3} =>rld |
${var:m:-n} | 从第m个字符至从末尾的第n个字符 | echo ${var:3:-3} =>lo,wo |
${var: -n:m} | 从末尾开始取n个字符,取m个字符 | echo ${var: -6:3} =>,wo |
${var: -n: -m} | 从倒数第n个取到倒数第m个 | echo ${var: -6: -1} =>,worl |
${var%.*}(非贪婪) ${var%%.*}(贪婪) | 删除VALUE字符串中以分隔符“.”匹配的右边字符,保留左边字符 “*”表示通配符,用于匹配字符串将被删除的字串(下同) | ${var%,*} =>hello |
${var#*.}(非贪婪) ${var##*.}(贪婪) | 删除VALUE字符串中以分隔符“.”匹配的左边字符,保留右边字符 | ${var#*.} =>world! |
${var/OLD/NEW}(非贪婪) ${var//OLD/NEW}(贪婪) | 用NEW子串替换VALUE字符串中匹配的OLD子串。 | ${var/world/Keven} =>hello,Keven! |