You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:46:08