我必须 bash 脚本:
脚本1.sh
HELLO=hello
export HELLO
./script2.sh
echo $HELLO
脚本2.sh
echo $HELLO
HELLO=world
export $HELLO
输出hello hello
代替hello world
. 如何修改相互调用的脚本之间的变量?
编辑:将变量作为参数传递是行不通的。我不知道 script2.sh 中可能更改的变量数量。
如果您不想将第二个脚本作为子进程运行,则必须获取它:
HELLO=hello
export HELLO
. ./script2.sh # Note the dot at the beginning
echo $HELLO
在第二个脚本中不需要导出 - 您已经告诉 bash 导出变量。
导出的变量在子 shell 中可用(与script2.sh
vs一样script1.sh
),但在父 shell 中不可用。
出于这个原因,设置的变量在script1.sh
中是可用的script2.sh
,但是设置它script2.sh
不会使它在返回script1.sh
时可用。script2.sh
如果您要将变量传递回调用者,则需要echo
它,并获取script2.sh
. 但是,script2.sh
如果您想查看其输出,则需要写入 stderr:
脚本1.sh:
HELLO=hello
export HELLO
HELLO=$(./script2.sh)
echo >&2 $HELLO
脚本2.sh:
echo $HELLO >&2
HELLO=world
echo $HELLO
当你通过 ./script2.sh 调用新脚本时,它会派生新的 shell,当 script2 完成执行时,新的 shell 将被关闭。当控制返回到脚本时,它仍然是旧的 shell,所以在 script2 中导出的变量将不可用。要在同一个 shell 中运行 script2,你可以像“. ./script2.sh”一样运行它
HELLO=hello
export HELLO
. ./script2.sh
echo $HELLO
script1.sh
contains的环境HELLO=hello
。你在孩子身上做的任何事情都script2.sh
不会改变这一点。