我遇到过这个好奇的bash表达:
somestring=4.5.6
echo ${somestring%rc*}
尽管如此,我只能打印4.5.6
。那么为什么有人会用呢?
我在this脚本中找到了它(查找pkgver
),所以我希望我不会错过任何必要的上下文。
答案 0 :(得分:2)
${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*
匹配的字符串右边的字符串然后删除,结果是剩余的字符串。