我有一个 shell 脚本,没有指定用于解释命令的 shell 类型的第一行。
这个 .sh 文件一直在 SCO Unix 5 系统上使用,直到迁移到更现代的系统(如 RHEL 7)上为止。
在我看来,sh 是 SCO Unix 中的默认 shell,而 bash 是 Red Hat Linux 中的默认 shell,所以我认为将脚本移植到 linux 并运行它,这个脚本将默认使用 bash 进行解释。
说到点子上,在这个脚本中有一个像这样的部分:
MY_SETUP=1
echo $MY_SETUP
MY_SETUP=2 export MYSETUP
echo $MY_SETUP
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,导出命令后的变量名称不是赋值中的名称(这是一个输入错误)。
我注意到如果脚本是由 sh 或 bash 解释的,则此部分之后 MY_SETUP 变量的值是不同的。
sh MY_SETUP 值 = 2
bash MY_SETUP 值 = 1
bash 似乎完全忽略了与 export 命令内联的赋值并保留了以前的值。
所有这些运行都没有返回任何错误,所以我想知道为什么会有不同的行为。有人可以解释我吗?
编辑:
来自 Stéphane Chazelas 的回答似乎在 bash 这个指令中
var=x export var
Run Code Online (Sandbox Code Playgroud)
不设置“x”值也不导出它,但在我的环境中它两者都做。我糊涂了。