如何通过环境变量覆盖局部变量

如何通过环境变量覆盖局部变量

我在生产环境中运行一个脚本,其中分配了一个值,但我想使用与此处不同的值。

我的脚本.sh

a=20181214

....

我在之后调用这个脚本export a=20181212,然后调用这个脚本,因为我想20181212从这个脚本中使用。但每次它都会选择值作为20181214

答案1

如果您可以修改脚本,请修改它,使其显示

a=${a:-20181214}

这将使其使用先前设置的值a,或者20181214如果$a为空或变量未设置。这是标准参数扩展

然后你可以使用

export a=20181212
./script.sh

或者

a=20181212 ./script.sh

后者避免在调用环境中设置变量,而只为脚本环境设置它。

如果你不能修改脚本,那么a无论您做什么,脚本总是会覆盖您的值。在这种情况下,请联系维护脚本的人员并说明情况。如果情况变得更糟,请使用您所使用的脚本的副本修改,假设脚本不希望位于特定位置。

答案2

脚本将在另一个 shell 中执行。该命令export A仅设置当前 shell 的变量。您可以在脚本顶部导出变量,它不会影响环境的其余部分。例如

~$ export A=a
~$ echo $A
a

如果您在同一个 shell 中创建脚本 test.sh

#!/bin/bash
export A=b
echo $A

输出将为“b”,但 shell 中 A 的值保持不变

相关内容