我在 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 中不起作用;你需要两个声明。
关于shell - 在与获取另一个脚本的同一行上定义 shell 脚本变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813256/