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

如何在Makefile中传递含$特殊字符的参数?

解决Makefile传递含$字符的密码问题

问题根源

  1. Shell会优先解析双引号中的$,将其视为变量引用,导致传递给Makefile时$丢失或被错误解析。
  2. 你的Makefile中pwsd:=$1是错误写法,$1是Makefile函数/宏的参数占位符,不适用于接收命令行传递的变量。

修正步骤

1. 修正Makefile

删除多余的pwsd:=$1行,命令行传递的变量可直接在Makefile中使用:

run:
	@echo "Password passed: ${pwsd}"
	@go run ./cmd/web ${pwsd}

2. 正确传递含$的密码

有两种可靠方式:

  • 方式一:用单引号包裹密码
    单引号会阻止Shell解析$,直接将原始内容传递给Makefile:
    make run pwsd='passwd$'
    
  • 方式二:双引号内用反斜杠转义$
    告诉Shell保留$字符,传递给Makefile:
    make run pwsd="passwd\$"
    

3. 进阶:确保Makefile不解析变量中的$

如果密码中包含多个特殊字符或需要确保变量原始值被完整传递,可使用Makefile的value函数,避免Makefile对变量内容展开:

run:
	@echo "Password passed: $(value pwsd)"
	@go run ./cmd/web $(value pwsd)

验证结果

使用上述任意方式,输出都会符合预期:

Password passed: passwd$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:33