在bash中初始化变量

时间:2017-07-19 09:03:44

标签: unix terminal environment

我正在将Windows CMD脚本迁移到unix上的bin / bash。 初始脚本的目标是设置一些变量,所以在从这个cmd窗口运行的任何东西之后都使用了那些变量。 我怎么能在UNIX中做同样的事情?看起来很简单

MyVar="value"

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

2 个答案:

答案 0 :(得分:2)

您可以使用简单分配初始化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 :(得分:1)

创建文件test.sh

添加以下行:

export b="key"

现在转到终端并执行以下操作:

source ./test.sh
echo $b

输出:

key