Ksi*_*ice 5 unix terminal environment
我正在将 Windows CMD 脚本迁移到 unix 上的 bin/bash。初始脚本的目标是设置一些变量,因此从此 cmd 窗口运行任何内容后都会使用这些变量。我怎样才能在 UNIX 中做同样的事情?看起来很简单
MyVar="value"
Run Code Online (Sandbox Code Playgroud)
不起作用。它仅在脚本本身中可见,而不是在运行脚本的终端中可见。
您可以通过简单的赋值来初始化 shell 变量
$ foo="fooval"
$ echo $foo
fooval
Run Code Online (Sandbox Code Playgroud)
这些变量不会传播到不相关的子进程:
$ foo=fooval
$ sh -c 'printf "\"%s\"" $foo'
""
Run Code Online (Sandbox Code Playgroud)
为了使它们传播,您需要将它们导出到进程的(shell)环境中(使它们成为“环境变量”(这些变量通常大写,即而
FOO不是foo)
$ export foo
$ sh -c 'echo $foo'
fooval
Run Code Online (Sandbox Code Playgroud)
您可以一步分配和导出:
$ export foo=fooval
Run Code Online (Sandbox Code Playgroud)
环境变量永远不会传播到进程层次结构之外的任何地方。(仅适用于子进程,绝不适用于父进程或完全不相关的进程)因此,如果您有一个带有变量赋值的脚本,则需要获取它,而不是执行它:
$ ./envvars #won't affect the parent shell
$ . ./envvars #this will
Run Code Online (Sandbox Code Playgroud)
没有每个终端的变量(尽管有每个终端的配置,具有可使用该stty工具进行操作的固定键)。