正在 bash 中初始化变量

Initializing variables in bash

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

MyVar="value"

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

您可以使用简单的赋值来初始化 shell 个变量

$ foo="fooval"
$ echo $foo
  fooval

这些变量不会传播到不相关的 child 进程:

$ foo=fooval
$ sh -c 'printf "\"%s\"" $foo' 
  ""

要使它们传播,您需要将它们导出到进程的 (shell's) 环境(将它们变成 "environment variables"(这些通常大写,即 FOO 而不是 foo)

$ export foo
$ sh -c 'echo $foo' 
  fooval

您可以一步分配和导出:

$ export foo=fooval

环境变量永远不会传播到除进程层次结构之外的任何地方。 (只对 children,从不对 parents 或完全不相关的进程) 因此,如果你有一个带有变量赋值的脚本,你需要获取它,而不是执行它:

 $ ./envvars #won't affect the parent shell
 $ . ./envvars #this will

没有 per-terminal 变量(尽管有 per-terminal 配置可以使用 stty 工具访问固定键。

创建文件test.sh

添加以下行:

export b="key"

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

source ./test.sh
echo $b

输出:

key