我可以列出在命令行上显式设置的bash变量吗?

时间:2018-03-27 09:32:34

标签: bash environment-variables

在bash脚本foo.sh中,由:

调用
y=hi
z=hello
export z
var1=7 x=a ./foo.sh arg1 arg2

设置变量yvar1x。是否可以枚举调用脚本时显式设置的所有变量,即var1x y z

3 个答案:

答案 0 :(得分:1)

不,不是这样,因为bash无缝地执行此操作,并且这些变量在命令行上没有设置(命令行为./foo.sh )。

bash看到命令行时:

var1=7 x=a ./foo.sh arg1 arg2

它只是运行./foo.sh arg1 arg2已经为它设置的那些变量,实际上就像你做的那样:

( export var1=7; export x=a; ./foo.sh arg1 arg2 )

除了可能创建的进程数之外。

正在运行的进程.foo.sh不知道 这些变量是如何设置的,它只能看到位而没有变量设置,因为它的命令线。

答案 1 :(得分:0)

如果您在脚本中运行没有参数的set,那么您会在输出中看到var1=7x=a,但您不会看到{{1}除非y被导出,否则。将显示所有导出的变量,您无法通过y=hi或通过将分配预先添加到命令来判断它们是否已导出。

答案 2 :(得分:0)

由于测试和扩展变量的顺序,您可以使用set两次来获得差异。例如:

export y=1
var1=7 x=a /path/to/script.sh $(set)

# script.sh
oldvars=$@
newvars=$(set)

var1x将在newvars,但不在oldvars。 (然后你需要'两个人找不到你想要的那些)。