版权声明:本文为博主原创文章,未经博主允许不得转载。 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/bash
echo ${a-3}
a=2
echo ${a-3}
a=
echo ${a-3}
输出(如果var没有声明,则以$DEFAULT作为其值):
3
2
- (空)
(2)
#! /bin/bash
echo ${b:-4}
b=
echo ${b:-4}
b=5
echo ${b:-4}
输出(
如果var没有声明或者为空值,则以$DEFAULT作为其值):
4
4
5
(3)
#! /bin/bash
echo ${c=6}
c=
echo ${c=6}
c=7
echo ${c=6}
输出(
如果var没有声明,则以$DEFAULT作为其值):
6
7
(4)
#! /bin/bash
echo ${d:=8}
d=
echo ${d:=8}
d=9
echo ${d:=8}
输出(
如果var没有声明或者为空值,则以$DEFAULT作为其值):
8
8
9
(5)
#! /bin/bash
echo ${e+9}
e=
echo ${e+9}
e=10
echo ${e+9}
输出(
如果var声明,则其值为$OTHER,否则为null字符串):
9
9
(6)
#! /bin/bash
echo ${f:+11}
f=
echo ${f:+11}
f=12
echo ${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=yoona
xiaosi@Qunar:~/company/sh$ echo ${#str}
5
xiaosi@Qunar:~/company/sh$ echo ${str:3}
na
xiaosi@Qunar:~/company/sh$ echo ${str:1:3}
oon
(4)${string/substring/replacement}:使用$replacement, 来代替第一个匹配的$substring
(5)${string//substring/replacement}:使用$replacement, 代替所有匹配的$substring
xiaosi@Qunar:~$ str=jifeng.si
xiaosi@Qunar:~$ echo ${str/./+}
jifeng+si
xiaosi@Qunar:~$ str=jifeng.si.si
xiaosi@Qunar:~$ echo ${str/./+}
jifeng+si.si
xiaosi@Qunar:~$ echo ${str//./+}
jifeng+si+si
(6)${string/#substring/replacement}:如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
xiaosi@Qunar:~/company/sh$ str=yoona
xiaosi@Qunar:~/company/sh$ echo ${str/#oo/xx}
yoona
xiaosi@Qunar:~/company/sh$ echo ${str/#yo/oy}
oyona
(7)
${string/%substring/replacement}
:如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
xiaosi@Qunar:~/company/sh$ str=yoona
xiaosi@Qunar:~/company/sh$ echo ${str/%oo/xx}
yoona
xiaosi@Qunar:~/company/sh$ echo ${str/%na/an}
yooan
xiaosi@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.ok
xiaosi@Qunar:~/company/sh$ echo ${str#*.}
sunny.ok
xiaosi@Qunar:~/company/sh$ echo ${str##*.}
ok
xiaosi@Qunar:~/company/sh$ echo ${str#yoo}
na.sunny.ok
xiaosi@Qunar:~/company/sh$ echo ${str#y}
oona.sunny.ok
xiaosi@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.ok
xiaosi@Qunar:~/company/sh$ echo ${str%.*}
yoona.sunny
xiaosi@Qunar:~/company/sh$ echo ${str%%.*}
yoona
xiaosi@Qunar:~/company/sh$ echo ${str%ok}
yoona.sunny.
xiaosi@Qunar:~/company/sh$ echo ${str%k}
yoona.sunny.o
xiaosi@Qunar:~/company/sh$ echo ${str%sunny}
yoona.sunny.ok