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

GitLab YAML与Makefile中$VAR和$(VAR)的语法差异及疑问

问题解答
  • 核心是Shell语法和Makefile语法的变量引用规则完全不同:

    • GitLab流水线的脚本(包括你用的echo命令)运行在Shell环境中,Shell引用环境变量的语法是$VAR或者${VAR},所以你用echo $VAR能正常输出值。
    • Makefile里的$(VAR)是Make工具专属的变量引用语法,Shell完全不识别这个写法——在Shell里,$(xxx)是命令替换语法,意思是执行xxx这个命令,把命令的输出结果替换到当前位置。所以你直接在Shell里敲echo $(VAR),Shell会尝试执行名为VAR的系统命令,自然找不到,就报出"VAR: Command not found"的错误。
  • 正确的测试方式:

    • 要验证环境变量是否正确传递给Makefile,别直接用Shell的echo,而是写一个简单的Makefile目标来测试,比如:
      test-var:
          echo $(VAR)
      
      然后在GitLab流水线里执行make test-var,这时候Make会解析$(VAR),把它替换成环境变量的值,再调用Shell执行echo命令,就能正常输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:05:54