正在 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
我正在将 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