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

Makefile中Shell变量为何出现额外引号?问题排查与解决

问题原因与解决方法

原因

Shell和Makefile对引号的处理逻辑存在差异。在Shell中执行export AWS_REGION="us-east-1"时,Shell会自动剥离外层双引号,实际环境变量的值是us-east-1。但Makefile本身不解析引号,当它把环境变量传递给执行命令的Shell时,会原样带上双引号,导致aws命令收到的region参数是"us-east-1"(带引号),触发格式错误。

解决方法

提供三种可行的处理方式:

  • 清理变量中的引号:在Makefile的deploy目标中,用Make的字符串替换功能去掉环境变量里的引号,示例:

    deploy:
        AWS_REGION=$(subst ",,$(AWS_REGION)) aws lambda update-function-code --function-name your-function-name ...
    

    $(subst ",,$(AWS_REGION))会把变量里的双引号替换为空,传递给aws命令的就是干净的us-east-1。

  • 设置环境变量时不带引号:在Shell里直接执行export AWS_REGION=us-east-1,不要加双引号。这样不管是在Shell直接执行命令,还是通过Makefile调用,环境变量的值都是不带引号的正确格式,从根源避免问题。

  • 让Shell重新解析变量:把Makefile里的命令用bash的-c参数包裹,让Shell重新处理环境变量,自动剥离引号,示例:

    deploy:
        bash -c 'aws lambda update-function-code --function-name your-function-name ...'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:13