我遇到了ksh脚本中的行,这些行声明了一个变量并在同一行上提供了另一个shell脚本。例如:
MYVARIABLE="abc" . ~core/script.sh
这是否会产生与单独声明它们不同的行为?例如:
MYVARIABLE="abc"
. ~core/script.sh
答案 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中不起作用;你需要两个陈述。