2017-07-19 68 views
0

我正在将windows CMD脚本迁移到unix上的bin/bash。 初始脚本的目标是设置一些变量,因此从此cmd窗口运行的任何内容都使用该变量。 如何在UNIX中执行相同的操作?看起来像简单在bash中初始化变量

MyVar="value" 

不起作用。它仅在脚本本身中可见,而不是从它运行的终端中可见。

+0

你为什么认为它不起作用? – hsz

+2

您无法修改父级环境。如果您想在* current *会话中设置一些变量,请源代码而不是运行它。 –

回答

1

可以初始化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工具可通过固定键访问每个终端的配置)。

1

创建一个文件test.sh

添加以下行:

export b="key" 

现在后藤终端并执行以下操作:

source ./test.sh 
echo $b 

输出:

key