在找到另一个脚本的同一行上定义一个shell脚本变量

问题描述:

我遇到了ksh脚本中的行,它们声明变量并在同一行上生成另一个shell脚本。例如:在找到另一个脚本的同一行上定义一个shell脚本变量

MYVARIABLE="abc" . ~core/script.sh 

这是否会产生与分别声明它们不同的行为?例如:

MYVARIABLE="abc" 
. ~core/script.sh 

MYVARIABLE="abc" . ~core/script.sh 

MYVARIABLE的情况下设置为仅abc用于源(.)命令的持续时间。所以它将在~core/script.sh的代码范围内。

MYVARIABLE="abc" 
. ~core/script.sh 

它都将在当前shell /脚本的范围和在~core/script.sh的范围来设置的情况下。

尝试运行第一个,然后echo $MYVARIABLE看看它仍然是空的(假设它开始为空)。再次运行后者,echo,您会看到它的值在当前shell中设置。

编辑:

注意MYVARIABLE是可见的~core/script.sh在这里这两种情况下的范围,而只是因为你是采购的脚本。如果你想运行一个可执行文件(甚至是一个可执行的shell脚本)而不是源代码,那么行为将会不同。当被执行时

MYVARIABLE=foo /usr/local/bin/some_executable 

将具有可变的范围,但

MYVARIABLE=foo 
/usr/local/bin/some_executable 

具有在范围可变。为了把它传播到可执行/子shell,你将不得不export它:

MYVARIABLE=foo 
export MYVARIABLE 
/use/local/bin/some_executable 

在伯恩衍生弹比KSH新(bash中,zsh中),你可以结合分配和出口:

export MYVARIABLE=foo 

但这在ksh中不起作用;你需要两个陈述。

+0

太好了,这是非常有用的信息。所以只需确认一下:在你的编辑中你提到'MYVARIABLE'在两种情况下都处于作用域,这是由于'script.sh'被调用的方式。假设脚本总是以这种方式来源,那么展示的行为是否有所不同? – user2245048 2013-04-04 15:15:54

+0

只要你来源,在源脚本中的可见性没有区别;它会在两种情况下看到价值。唯一的区别是'MYVARIABLE = foo。 something.sh'风格不会在调用范围(从中调用源的shell或脚本)中分配。 – 2013-04-04 15:45:59