shell中的参数替换

常用类型参数替换

${parameter}            与$parameter相同, 也就是变量parameter的值.

在某些上下文中, ${parameter}很少会产生混淆.

 

${parameter-default}     如果变量parameter没被声明, 那么就使用默认值.

${parameter:-default}     如果变量parameter没被设置, 那么就使用默认值.

${parameter-default}和${parameter:-default}在绝大多数的情况下都是相同的.

只有在parameter已经被声明, 但是被赋null值得时候, 这个额外的:才会产生不同

的结果(即此时前者不会输出,后者可以输出).

 

${parameter=default}     如果变量parameter没声明, 那么就把它的值设为default.

${parameter:=default}     如果变量parameter没设置, 那么就把它的值设为default.

这两种形式基本上是一样的. 只有在变量$parameter被声明并且被设置为null值的时候, :才会引

起这两种形式的不同.(如上边所示)

 

${parameter+alt_value}     如果变量parameter被声明了, 那么就使用alt_value, 否则就使用

null字符串.

${parameter:+alt_value}    如果变量parameter被设置了, 那么就使用alt_value, 否则就使用

null字符串.

这两种形式绝大多数情况下都一样. 只有在parameter被声明并且设置为null值的时候, 多出来的

这个:才会引起这两种形式的不同(即后者不会输出).

 

${parameter?err_msg}     如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg

错误消息.

${parameter:?err_msg}    如果parameter已经被设置, 那么就使用设置的值, 否则打印

err_msg错误消息.

这两种形式绝大多数情况都是一样的. 和上边所讲的情况一样, 只有在parameter被声明并设置为

null值的时候, 多出来的:才会引起这两种形式的不同.

 

变量长度/子串删除

${#var}

字符串长度(变量$var得字符个数). 对于array来说, ${#array}表示的是数组中第一个元素的长度.

例外情况:

${#*}和${#@}表示位置参数的个数.

对于数组来说, ${#array[*]}和${#array[@]}表示数组中元素的个数.

 

${var#Pattern}, ${var##Pattern}

从变量$var的开头删除最短或最长匹配$Pattern的子串.

 

${var%Pattern}, ${var%%Pattern}

从变量$var的结尾删除最短或最长匹配$Pattern的子串.

 

变量扩展/子串替换

这些结构都是从ksh中引入的.

${var:pos}

变量var从位置pos开始扩展(即pos之前的字符都丢弃).

${var:pos:len}

变量var从位置pos开始, 并扩展len个字符.

${var/Pattern/Replacement}

使用Replacement来替换变量var中第一个匹配Pattern的字符串.

${var//Pattern/Replacement}

全局替换. 所有在变量var匹配Pattern的字符串, 都会被替换为Replacement.

${!varprefix*}, ${!varprefix@}

匹配所有之前声明过的, 并且以varprefix开头的变量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值