4

我在 ksh 脚本中遇到了声明变量并在同一行上获取另一个 shell 脚本的行。例如:

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

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

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

1 回答 1

6

如果是

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

MYVARIABLEabc在源 ( .) 命令的持续时间内设置为。所以它将在~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 中不起作用;你需要两个陈述。

于 2013-04-04T14:01:53.750 回答