我在 ksh 脚本中遇到了声明变量并在同一行上获取另一个 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)更新的 Bourne 派生的 shell 中,您可以将赋值和导出结合起来:
export MYVARIABLE=foo
但这在 ksh 中不起作用;你需要两个陈述。