Bash 默认生成文件中的环境变量

Bash 默认生成文件中的环境变量,bash,makefile,Bash,Makefile,我有一个makefile,在其中我想要一些可以通过ENV变量更改的默认行为 这很好: foo: echo "${MY_VAR} 但是,当尝试添加默认值时,情况会停止: foo: echo "${MY_VAR:-defaultValue}" 这总是一个空字符串。如果我直接在shell上执行echo,它将按预期工作,并且我将获得我的_VAR的值或defaultValue,这取决于我的_VAR是否已设置 我记得以前在makefile中遇到过问题。他们有

我有一个makefile,在其中我想要一些可以通过ENV变量更改的默认行为

这很好:

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}”