我正在将Windows CMD脚本迁移到unix上的bin / bash。 初始脚本的目标是设置一些变量,所以在从这个cmd窗口运行的任何东西之后都使用了那些变量。 我怎么能在UNIX中做同样的事情?看起来很简单
MyVar="value"
不起作用。它只在脚本本身可见,而不是从运行它的终端。
答案 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