您基本上有两个选择:
export TESTVARIABLE在执行第二个脚本之前,将变量设置为环境变量()。
源第二个脚本,即. test2.sh它将在同一外壳中运行。这将使您轻松共享数组之类的更复杂的变量,而且还意味着其他脚本可以在源shell中修改变量。
更新:
要用于export设置环境变量,可以使用现有变量:
A=10
# ...
export A
这应该同时适用于bash和sh。 bash还允许将其合并,如下所示:
export A=10
这也适用于我 sh(碰巧是bash,您可以echo $SHELL用来检查)。但是我不认为这可以保证全部工作sh,因此最好谨慎使用并将它们分开。
您以这种方式导出的任何变量将在您执行的脚本中可见,例如:
灰:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
然后:
$ ./a.sh
The message is: hello
这些都是shell脚本的事实也是偶然的。可以将环境变量传递给您执行的任何进程,例如,如果我们使用python代替,则它可能类似于:
灰:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
采购:
相反,我们可以这样采购:
灰:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
然后:
$ ./a.sh
The message is: hello
这或多或少b.sh直接“导入”了直接内容并在同一shell中执行。注意,我们不必导出变量即可访问它。这隐式共享您拥有的所有变量,并允许其他脚本在外壳中添加/删除/修改变量。当然,在此模型中,两个脚本都应使用相同的语言(sh或bash)。举个例子,我们如何来回传递消息:
灰:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
然后:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
这在中同样有效bash。它也使共享数组或关联数组之类的更复杂的数据变得容易,而这些数据无法表达为环境变量(至少没有付出很大的努力)。