Roc*_*uts 12 shell-script variable
如何设置要在脚本中使用的变量?它们不必是全局/系统范围的,只需当前会话就足够了。但是由于某种原因,即使我直接从当前终端运行脚本,它们似乎也不见了。
例子:
foo=bar
echo "$foo"
Run Code Online (Sandbox Code Playgroud)
输出: bar
但是,如果 test.sh 包含echo "$foo"
并且我这样做:
foo=bar
./test.sh
Run Code Online (Sandbox Code Playgroud)
输出为空。如何使用终端会话设置临时变量的范围,该范围在从同一会话执行脚本时仍然有效?
Ken*_*nny 12
export foo=bar
将全局变量 $foo 设置为 bar。您还可以使用foo=bar ./test.sh
单个命令将 foo 设置为 test.sh 的 bar。
小智 7
当您运行 shell 脚本时,它会在一个新的 shell 实例中执行,并且不会继承在交互式 shell 实例中实例化的任何变量。
可以通过这种方式继承特定的变量,称为环境变量。您可以使用 将变量赋值作为环境变量export
,例如export foo=bar
。这是 bash 语法,其他 shell 可能会使用env
或其他一些方法。
您还可以通过“采购”它使 shell 脚本在同一个 shell 实例中执行。您可以使用. test.sh
(注意句号)或使用source test.sh
. 您可以在交互式会话中执行此操作,也可以在 shell 脚本中执行此操作。这对于创建 shell“库”非常方便,您可以在其中从外部文件中获取一组 shell 函数或变量定义。超级好用。
例如:
#!/bin/bash
. /path/lib.sh
echo $foo # foo is instantiated in lib.sh
do_something # this is a shell function from lib.sh
Run Code Online (Sandbox Code Playgroud)
lib.sh 在哪里:
foo="bar"
do_something() {
echo "I am do_something"
}
Run Code Online (Sandbox Code Playgroud)