版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/51549314
1. 判断读取字符串值
| 表达式 | 含义 |
| ${var} | 获取变量var的值(与$var相同) |
| ${var-DEFAULT} | 如果var没有声明,则以$DEFAULT作为其值 |
| ${var:-DEFAULT} | 如果var没有声明或者为空值,则以$DEFAULT作为其值 |
| ${var=DEFAULT} | 如果var没有声明,则以$DEFAULT作为其值 |
| ${var:=DEFAULT} | 如果var没有声明或者为空值,则以$DEFAULT作为其值 |
| ${var+OTHER} | 如果var声明,则其值为$OTHER,否则为null字符串 |
| ${var:+OTHER} | 如果var被设置值,则其值为$OTHER, 否则为null字符串 |
| ${var?ERR_MSG} | 如果var没被声明,则打印$ERR_MSG |
| ${var:?ERR_MSG} | 如果var没被设置,那么就打印$ERR_MSG |
| ${!varprefix*} | 匹配之前所有以varprefix开头进行声明的变量 |
| ${!varprefix@} | 匹配之前所有以varprefix开头进行声明的变量 |
举例:
(1)
#! /bin/bashecho ${a-3}a=2echo ${a-3}a=echo ${a-3}
输出(如果var没有声明,则以$DEFAULT作为其值):
32- (空)
(2)
#! /bin/bashecho ${b:-4}b=echo ${b:-4}b=5echo ${b:-4}
输出(
如果var没有声明或者为空值,则以$DEFAULT作为其值):
445
(3)
#! /bin/bashecho ${c=6}c=echo ${c=6}c=7echo ${c=6}
输出(
如果var没有声明,则以$DEFAULT作为其值):
67
(4)
#! /bin/bashecho ${d:=8}d=echo ${d:=8}d=9echo ${d:=8}
输出(
如果var没有声明或者为空值,则以$DEFAULT作为其值):
889
(5)
#! /bin/bashecho ${e+9}e=echo ${e+9}e=10echo ${e+9}
输出(
如果var声明,则其值为$OTHER,否则为null字符串):
99
(6)
#! /bin/bashecho ${f:+11}f=echo ${f:+11}f=12echo ${f:+11}
输出(
如果var被设置值,则其值为$OTHER, 否则为null字符串):
11
2. 字符串操作
(1)${#string}:变量string的长度
(2)${string:position}:从变量string获取由下标position开始的子串
(3)${string:position:length}:从变量string中获取由position下标开始长度为length的子串
xiaosi@Qunar:~/company/sh$ str=yoonaxiaosi@Qunar:~/company/sh$ echo ${#str}5xiaosi@Qunar:~/company/sh$ echo ${str:3}naxiaosi@Qunar:~/company/sh$ echo ${str:1:3}oon
(4)${string/substring/replacement}:使用$replacement, 来代替第一个匹配的$substring
(5)${string//substring/replacement}:使用$replacement, 代替所有匹配的$substring
xiaosi@Qunar:~$ str=jifeng.sixiaosi@Qunar:~$ echo ${str/./+}jifeng+sixiaosi@Qunar:~$ str=jifeng.si.sixiaosi@Qunar:~$ echo ${str/./+}jifeng+si.sixiaosi@Qunar:~$ echo ${str//./+}jifeng+si+si
(6)${string/#substring/replacement}:如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
xiaosi@Qunar:~/company/sh$ str=yoonaxiaosi@Qunar:~/company/sh$ echo ${str/#oo/xx}yoonaxiaosi@Qunar:~/company/sh$ echo ${str/#yo/oy}oyona
(7)
${string/%substring/replacement}
:如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
xiaosi@Qunar:~/company/sh$ str=yoonaxiaosi@Qunar:~/company/sh$ echo ${str/%oo/xx}yoonaxiaosi@Qunar:~/company/sh$ echo ${str/%na/an}yooanxiaosi@Qunar:~/company/sh$ echo ${str/oo/xx}yxxna
(8)
${string#substring}
:从变量$string的开头(从开头匹配),删除最短匹配$substring的子串
(9)${string##substring}:从变量$string的开头(从开头匹配),删除最长匹配$substring的子串
xiaosi@Qunar:~/company/sh$ str=yoona.sunny.okxiaosi@Qunar:~/company/sh$ echo ${str#*.}sunny.okxiaosi@Qunar:~/company/sh$ echo ${str##*.}okxiaosi@Qunar:~/company/sh$ echo ${str#yoo}na.sunny.okxiaosi@Qunar:~/company/sh$ echo ${str#y}oona.sunny.okxiaosi@Qunar:~/company/sh$ echo ${str#sunny}yoona.sunny.ok
(10)
${string%substring}
:从变量$string的结尾(从末尾匹配),删除最短匹配$substring的子串
(11)${string%%substring}:从变量$string的结尾(从末尾匹配),删除最长匹配$substring的子串
xiaosi@Qunar:~/company/sh$ str=yoona.sunny.okxiaosi@Qunar:~/company/sh$ echo ${str%.*}yoona.sunnyxiaosi@Qunar:~/company/sh$ echo ${str%%.*}yoonaxiaosi@Qunar:~/company/sh$ echo ${str%ok}yoona.sunny.xiaosi@Qunar:~/company/sh$ echo ${str%k}yoona.sunny.oxiaosi@Qunar:~/company/sh$ echo ${str%sunny}yoona.sunny.ok