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

Bash含空格变量单引号展开问题:Make命令传参失败

解决Bash脚本中make参数传递失败的问题

问题根源:你把引号硬编码进变量DD里了,Bash在展开变量时不会重新解析这些引号。执行make one $DD时,Shell会把CPPFLAGS='-DONE、-DTWO、-DTHREE'拆成三个独立参数传给make,这就导致make识别到无效选项报错。

给你两个解决方法:

方法一:使用Bash数组(推荐,安全可靠)

用数组来存储参数,能正确保留参数的结构:

DEFINES='-DONE -DTWO -DTHREE'
# 定义数组,每个元素是一个完整的键值对参数
MAKE_ARGS=(CPPFLAGS="$DEFINES")

# 调用make时展开数组,注意用双引号和[@]
make one "${MAKE_ARGS[@]}"
make two "${MAKE_ARGS[@]}"

这样Shell会把CPPFLAGS="-DONE -DTWO -DTHREE"作为一个独立参数传递给make,完全符合预期。

方法二:使用eval(不推荐,有安全风险)

如果一定要用字符串拼接的方式,可以借助eval让Shell重新解析引号,但要注意:如果DEFINES里包含特殊字符(比如空格、引号、通配符),可能会触发意外的命令执行,安全性差。

DEFINES='-DONE -DTWO -DTHREE'
DD="CPPFLAGS='$DEFINES'"

eval "make one $DD"
eval "make two $DD"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:04:53