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

标签 shell unix ksh

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

相关文章:

python - 我如何为在 Linux 环境下使用 Python 工作一个夏天做准备?

windows - 每个操作系统的文件路径中是否存在非法字符?

linux - shell 脚本由 crontab 运行但没有输出

linux - 在 `unzip -l` 时提取 zip 存档中的文件名列表

linux - 使用 ls + pattern 中的 KSH 或 BASH 循环

Docker:将 Linux korn Shell 添加到现有容器

bash - : ${ROOT_DIR: ="."} do in a bash script? 是什么

linux - 在 linux 上查看文件大小

java - 将复杂的命令放入变量中并作为参数传递给另一个脚本以供稍后运行

linux - 在 shell 中循环多列