我正在寻找一种方法,将Bash脚本中的导出环境变量设置为字典中仅在 脚本中指定的默认值,如果环境变量之前未设置为任何值(甚至一个空字符串),并且在解决此任务的代码中不多次提及环境变量的名称时执行此操作。
请注意,解决方案here和here(使用${FOO:=42}
)不适用,因为它们只设置了shell变量,而不是导出的环境变量。我不想为一个命令设置它;我想为来自同一个shell的所有命令设置它。
还要注意类似
的内容export FOO="${FOO:-42}"
没有回答这个问题,因为它在解决方案中提到了FOO
两次。
我意识到这个问题有一个简单的技术替代解决方案 - 只需使用两次提到变量名称的解决方案。明确地说,“不,不能做”对这个问题是一个合理的答案,如果确实不可能的话,如果两次提到变量不是一个问题,那些替代方案就完全没问题了,所以这是一个有点人为的问题(我只关心这一点,使编辑脚本稍微简洁一些)。
答案 0 :(得分:0)
-a
shell选项会在您分配变量时自动导出变量。
set -a
: ${FOO:=42}
: ${BAR:=baz}
set +a
您需要注意在块之前不会创建如此测试的变量。如果BAR
具有值但尚未导出,则仅使用扩展不足以设置BAR
的导出属性;必须创建或修改它。