Bash变量截取疑问:为何无法匹配括号及提取括号前内容的方法
Bash字符串提取问题:匹配括号失败的原因及解决方法
给定变量:
toto="function(param"
需要提取其中的function子串,尝试以下命令未达到预期:
echo "${toto%(}"
输出结果:
function(param
而执行以下命令能得到部分结果:
echo "${toto%param}"
输出:
function(
为什么无法匹配括号?
Bash的%参数展开是从字符串末尾开始匹配并移除最短的后缀模式,你的变量toto结尾是param,(位于字符串中间位置,并非后缀部分,所以${toto%(}的模式(根本匹配不到任何后缀内容,自然不会修改原字符串。
而${toto%param}能生效,是因为param正好是字符串的结尾部分,符合后缀匹配的规则。
如何提取括号前的function子串?
可以用以下几种方法:
使用
%%最长后缀匹配:%%会匹配并移除最长的符合模式的后缀,用(*作为模式((是字面量,*匹配任意后续字符),就能移除从第一个(到结尾的所有内容:echo "${toto%%(*}"输出:
function使用
cut命令分割:
以(作为分隔符,提取第一个字段:echo "$toto" | cut -d'(' -f1使用
sed替换:
替换掉(及之后的所有内容:echo "$toto" | sed 's/(.*//'
内容的提问来源于stack exchange,提问作者Itération 122442
相关产品推荐
相关产品推荐

