$ {variable%rc *}的价值是多少?

时间:2015-07-06 09:36:40

标签: string bash

我遇到过这个好奇的bash表达:

somestring=4.5.6
echo ${somestring%rc*}

尽管如此,我只能打印4.5.6。那么为什么有人会用呢?

我在this脚本中找到了它(查找pkgver),所以我希望我不会错过任何必要的上下文。

3 个答案:

答案 0 :(得分:2)

Source:

  

${string%substring}从后面删除$substring的最短匹配   $string

目的是仅回显数字版本,而不使用rc*后缀作为字符串:

somestring=4.5.6rc1
somestring=4.5.6rc23_whatever

更新:
更好的选择是 echo ${somestring%%rc*} 否则,可能会发生以下情况:

somestring=4.5.6rc1_rc2
echo ${somestring%rc*}
4.5.6rc1_

而:

echo ${somestring%%rc*}
4.5.6

答案 1 :(得分:0)

它从rc中移除*及以下任何字符(somestring)。例如,参见this answer

答案 2 :(得分:0)

这称为参数扩展。

来自Bash manual

  

$ {参数%字}

     

$ {参数%%字}

     

这个词被扩展为产生一个模式,就像文件名扩展一样。如果模式匹配展开的尾部   参数的值,那么扩展的结果就是值   具有最短匹配模式的参数('%'大小写)或   最长匹配模式('%%'案例)已删除。如果参数是'@'   或'',模式删除操作应用于每个位置   依次参数,扩展是结果列表。如果   参数是一个用'@'或''下标的数组变量   模式删除操作应用于数组的每个成员   转,并且扩展是结果列表。

<小时/> 简单地"${somestring%rc*}"是裁切rc**表示rc之后的任何内容)来自$somestring的权利,即rc*匹配的字符串右边的字符串然后删除,结果是剩余的字符串。