Bash中引调用变量的过成就是参数扩展,$符号会引导参数扩展。
1.基本参数扩展:
示例1:a=123
echo $a
echo ${a} #{}是可选的,但是增加{}可以保护待扩展的变量,如果参数还紧连着其他字符,{}就必须有
示例2:b=123
echo $b
echo $bs
echo ${b}s #变量名后面加了s,此时必须使用{}把变量括起来,不然bash会认为这是新的变量,由于bs未赋值,所以输出为空
2.间接参数扩展:${!var}
示例:a=b
b=123
echo ${a} #基本扩展,输出结果为b
echo ${!a} #间接参数扩展,输出结果为b的值123,${!var}将参数扩展为变量的值
3.大小写修改:
示例:a=hello b=HELLO
echo ${a^} #替换变量a中的第一个小写字母为大写
echo ${a^^} #替换变量a中的所有小写字母为大写
echo ${b,} #替换变量b中的第一个大写字母为小写
echo ${b,,} #替换变量b中的所有大写字母为小写
上例中"^"和","可以用"~"替代
示例:a=hello b=HELLO
echo ${a~} #用~替代^
echo ${a~~}
echo ${b~} #用~替代 ,
echo ${b~~}
4.变量名扩展:${!var*}
示例:echo ${!BASH*} #列出所有以BASH开头的变量名,变量名默认用空格分隔。其中*可以用@替代
5.掐头去尾:${var#*分隔符} ${var##*分隔符} ${var%分隔符*} ${var%%分隔符*}
掐头示例:a=`echo ${PATH}`
echo ${a}
echo${a#*:} #以:为分隔符进行最短掐头
echo${a##*:} #以:为分隔符进行最长掐头
以上示例中当以空格为分隔符时,由于变量存储的值中没有空格,所以输出默认值,没有指定分隔符时输出也是默认值
去尾示例:a=`echo ${PATH}`
echo ${a}
echo ${a%:*} #以:为分隔符进行最短去尾
echo ${a%%:*} #以:为分隔符进行最长去尾
上列中当以/为分隔符进行最长去尾时,所有的内容都被去除,输出为空。
6.字串替换:${var/被替换字串/替换字串} ${var//被替换字串/替换字串}
示例:a="this is s test"
echo ${a}
echo ${a/is/mm} #最短替换,替换匹配的第一个is
echo ${a//is/mm} #最长替换,替换所有匹配的is
上列中如果替换字串为空,则相当于删除操作。
示例:
a="this is s test"
echo ${a}
echo ${a/is/} #删除匹配的第一个is
echo ${a//is/} #删除匹配的所有is
7.输出字串长度:echo ${#var}
示例:a="hello world"
echo ${a}
echo ${#a} #输出字串的长度,空格也算
8.字串截取:${var:开始:长度}
示例:a="123456789101112"
echo ${a}
echo ${a:5} #从位置5开始截,未指定长度,默认到最后。需要注意的是,字串的第一个字符位置是0,在示例中5位置是数字6
echo ${a:5:5} #从位置5开始截,向后截取5个字符
9.给变量赋临时值:${var:-初始值} #当变量未定义或定义为null时,此方法会将初始值临时赋予变量var
${var-初始值} #当变量未定义时,此方法会将初始值临时赋予变量var
示例1:a="" #定义一个null变量a,引号之间没有内容即是一个null
echo ${a}
echo ${a:-hello} #此时变量a为null,hello将临时赋予变量a
echo ${a-hello} #a已定义为null,不做任何操作
未定义的示例(b变量未在系统中定义):
示例2:a="hello" #当变量定义且不为null时,${a:-world}和${a-world}不做任何操作
echo ${a}
echo ${a:-world}
echo ${a-world}
示例3:echo ${b} #变量b未定义时,${b:-hello}和${b-hello}都会将hello临时赋予b
echo ${b:-hello}
echo ${b-hello}
10.给变量赋默认值:${var:=默认值} ${var=默认值} 两种方法效果一样
示例1:a="" #变量a被定义为null
echo ${a}
echo ${a:=hello} #由于变量a为null,hello被赋予a,作为a的默认值
echo ${a}
示例2:a="hello"
echo ${a}
echo ${a:=world} #a被定义且不为null,此时不做任何扩展
echo ${a}
示例3:echo ${c}
echo ${c:=hello} #变量c未被定义,hello被赋予c的默认值
echo ${c}
11.使用替代值:${var:+替代值} ${var+替代值} 两种方法效果一样
示例1:a=""
echo ${a}
echo ${a:+hello} #a被定义为null,此时不做任何扩展
示例2:echo ${d}
echo ${d:+hello} #b未被定义,此时也不做任何扩展
示例3:a="hello"
echo ${a}
echo ${a:+world} #当a被定义且不为null时,a被扩展为替代值
12:检查变量是否未定义或被定义为null:${var:?提示值}
示例1:a=""
echo ${a}
echo ${a:?error} #a被定义为null,此时将输出:-bash: a: 提示值
示例2:echo ${d}
echo ${d:?error} #d未定义,此时将输出:-bash: d: 提示值
示例3:a="hello"
echo ${a}
echo ${a:?error} #a已定义且不为null,此时不做任何扩展