gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:30:50 29 4
gpt4 key购买 nike

我在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com