shell中的参数扩展--详解

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,此时不做任何扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值