在bash中初始化变量

Ksi*_*ice 5 unix terminal environment

我正在将 Windows CMD 脚本迁移到 unix 上的 bin/bash。初始脚本的目标是设置一些变量,因此从此 cmd 窗口运行任何内容后都会使用这些变量。我怎样才能在 UNIX 中做同样的事情?看起来很简单

MyVar="value"
Run Code Online (Sandbox Code Playgroud)

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

PSk*_*cik 8

您可以通过简单的赋值来初始化 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工具进行操作的固定键)。