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

Bash脚本中命令存入变量后执行提示‘Command not found’的问题

问题原因与解决方法

问题根源

当你把"npm run jest"赋值给变量str后,Bash执行$str时,会把整个字符串当作单个完整的命令名去系统路径中查找,而不是自动拆分出npm(命令)和run jest(参数)。系统找不到名为npm run jest的命令,因此报错。

解决方法

1. 使用数组存储命令(推荐,安全可靠)

将命令和参数拆分为数组的独立元素,Bash会正确识别每个部分:

cmd=(npm run jest)
echo "$("${cmd[@]}")"

"${cmd[@]}"会将数组元素展开为独立的单词,Bash能准确解析为npm命令加上run jest参数。

2. 用eval强制解析(不推荐,有安全风险)

如果必须使用字符串变量,可以通过eval重新解析字符串,拆分命令与参数:

str="npm run jest"
echo "$(eval "$str")"

注意:eval会执行字符串中的任意命令,若变量包含不可信内容,可能导致安全问题,仅在明确无风险时使用。

3. 封装为函数(更优,可读性高)

把命令封装成函数,调用时完全避免参数拆分问题:

run_jest() {
  npm run jest
}
echo "$(run_jest)"

函数内直接执行命令,逻辑清晰,还能方便扩展参数或添加额外逻辑。

内容的提问来源于stack exchange,提问作者Alan P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:42:06