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

如何在Bash中展开含管道的字符串以执行对应命令?

如何正确执行存储在变量中的带管道命令

问题原因

你遇到的核心问题是Bash的变量展开逻辑:直接使用$cmd时,Shell仅会完成分词和路径扩展,不会解析字符串中的Shell元字符(比如管道|)。所以echo hi | wc里的|和wc都被当成了echo的参数,最终执行的是echo hi '|' wc,自然只会输出hi | wc。

解决方案

方法1:用eval命令解析执行

eval会让Shell重新对展开后的字符串进行完整语法解析,包括识别管道这类元字符。直接运行:

eval "$cmd"

这样Shell就会正确把|当成管道,执行echo hi并将输出传给wc,得到预期的字符数结果。

⚠️ 注意:eval存在安全风险,如果cmd变量包含不可信内容(比如用户输入的恶意代码),可能会执行危险操作,仅在你完全可控变量内容的场景下使用。

方法2:用函数替代变量(更推荐)

如果是在脚本里使用,更安全可靠的方式是定义函数,而非把命令存在字符串变量里:

cmd() {
    echo hi | wc
}

之后直接调用函数名即可执行命令:

cmd

函数的方式避免了字符串解析的问题,更易维护扩展,安全性也更高。

内容的提问来源于stack exchange,提问作者Mark VY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:54:51