我正在将windows CMD脚本迁移到unix上的bin/bash。 初始脚本的目标是设置一些变量,因此从此cmd窗口运行的任何内容都使用该变量。 如何在UNIX中执行相同的操作?看起来像简单在bash中初始化变量
MyVar="value"
不起作用。它仅在脚本本身中可见,而不是从它运行的终端中可见。
我正在将windows CMD脚本迁移到unix上的bin/bash。 初始脚本的目标是设置一些变量,因此从此cmd窗口运行的任何内容都使用该变量。 如何在UNIX中执行相同的操作?看起来像简单在bash中初始化变量
MyVar="value"
不起作用。它仅在脚本本身中可见,而不是从它运行的终端中可见。
可以初始化shell变量简单的任务
$ foo="fooval"
$ echo $foo
fooval
这些变量不会蔓延到不相关的子进程:
$ foo=fooval
$ sh -c 'printf "\"%s\"" $foo'
""
为了使它们蔓延,你需要将它们导出到进程的(shell's) 环境(使它们成为“环境变量”(这些通常是大写的,即 FOO
而不是foo
)
$ export foo
$ sh -c 'echo $foo'
fooval
您可以一步到位地分配和出口:
$ export foo=fooval
环境变量将永远不会传播任何地方,但在下跌过程中的层次结构。 (仅适用于儿童,从不向父母或完全不相关的进程) 因此,如果你有一个变量赋值的脚本,那么需要获得它,而不是执行它:
$ ./envvars #won't affect the parent shell
$ . ./envvars #this will
没有按终端变量(尽管使用stty
工具可通过固定键访问每个终端的配置)。
创建一个文件test.sh
添加以下行:
export b="key"
现在后藤终端并执行以下操作:
source ./test.sh
echo $b
输出:
key
你为什么认为它不起作用? – hsz
您无法修改父级环境。如果您想在* current *会话中设置一些变量,请源代码而不是运行它。 –