Bash 默认生成文件中的环境变量
我有一个makefile,在其中我想要一些可以通过ENV变量更改的默认行为 这很好:Bash 默认生成文件中的环境变量,bash,makefile,Bash,Makefile,我有一个makefile,在其中我想要一些可以通过ENV变量更改的默认行为 这很好: foo: echo "${MY_VAR} 但是,当尝试添加默认值时,情况会停止: foo: echo "${MY_VAR:-defaultValue}" 这总是一个空字符串。如果我直接在shell上执行echo,它将按预期工作,并且我将获得我的_VAR的值或defaultValue,这取决于我的_VAR是否已设置 我记得以前在makefile中遇到过问题。他们有
foo:
echo "${MY_VAR}
但是,当尝试添加默认值时,情况会停止:
foo:
echo "${MY_VAR:-defaultValue}"
这总是一个空字符串。如果我直接在shell上执行echo,它将按预期工作,并且我将获得我的_VAR的值或defaultValue,这取决于我的_VAR是否已设置
我记得以前在makefile中遇到过问题。他们有一些“特殊的bash规则”吗?没有特殊的bash规则 但是,make变量和shell变量之间有很大的区别 Make变量(在makefile中设置)由
$(FOO)
或${FOO}
引用。Make变量不支持shell组合操作,如:-
Shell变量是$FOO
或${FOO}
,但由于该语法与make的变量语法重叠,您必须对其进行转义,以便make不会弄乱它们。您可以通过加倍$
来实现这一点,因此要从makefile配方中访问shell变量,您可以编写$$FOO
或$${FOO}
您在示例中没有明确说明
MY\u VAR
是make变量还是shell变量,因此我们无法为您提供解决方案。没有特殊的bash规则
但是,make变量和shell变量之间有很大的区别
Make变量(在makefile中设置)由$(FOO)
或${FOO}
引用。Make变量不支持shell组合操作,如:-
Shell变量是$FOO
或${FOO}
,但由于该语法与make的变量语法重叠,您必须对其进行转义,以便make不会弄乱它们。您可以通过加倍$
来实现这一点,因此要从makefile配方中访问shell变量,您可以编写$$FOO
或$${FOO}
您在示例中没有明确说明
MY\u VAR
是make变量还是shell变量,因此我们无法为您提供解决方案。MY\u VAR是shell变量<代码>MY_VAR=foo;导出我的变量。转义成功:echo“$${MY\u VAR:-defaultValue}”
MY\u VAR是一个shell变量<代码>MY_VAR=foo;导出我的变量。转义成功:echo“$${MY\u VAR:-defaultValue}”