在与另一个脚本相同的行上定义shell脚本变量

时间:2013-04-04 13:52:39

标签: shell unix ksh

我遇到了ksh脚本中的行,这些行声明了一个变量并在同一行上提供了另一个shell脚本。例如:

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

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

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

1 个答案:

答案 0 :(得分:6)

的情况下
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)更新的Bourne派生shell中,您可以组合赋值和导出:

export MYVARIABLE=foo

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