如果未设置,请将 Bash 中导出的环境变量设置为默认值,提及一次

Man*_*mez 5 bash

我正在寻找一种方法,当环境变量之前未设置为任何值(甚至是空字符串)时,才将 Bash 脚本中导出的环境变量设置为脚本中字面指定的默认值,并执行此操作无需在解决此任务的代码中多次提及环境变量的名称。

\n\n

请注意,此处此处的解决方案(使用${FOO:=42})不适用,因为它们仅设置 shell 变量,而不是导出的环境变量。我不想为单个命令设置它;我想为来自同一 shell 的所有命令设置它。

\n\n

另请注意,类似

\n\n
export FOO="${FOO:-42}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

也没有回答这个问题,因为它FOO在解决方案中提到了两次。

\n\n

我意识到这个问题有一个简单的技术替代解决方案 \xe2\x80\x94 只需使用两次提到变量名称的解决方案。明确地说,“不,这是不可能的”是对这个问题的合理答案,如果它确实不可能,并且如果两次提及该变量不是问题,那么这些替代方案是完全可以的,所以它\这是一个稍微人为的问题(我只关心这个以使编辑脚本稍微更加干净和容易)。

\n

che*_*ner 7

-a当您给变量赋值时,shell 选项会自动导出该变量。

set -a
: ${FOO:=42}
: ${BAR:=baz}
set +a
Run Code Online (Sandbox Code Playgroud)

您确实需要注意,如此测试的变量都不是在块之前创建的。如果BAR有值但尚未导出,则仅扩展不足以设置 的BAR导出属性;必须创建或修改它。