脚本中的Bash导出;下一个脚本?

脚本中的Bash导出;下一个脚本?,bash,export,Bash,Export,我想在脚本中设置一个变量,并在下一个命令的脚本之外设置它 这就是我所拥有的: #!/bin/bash myExports="TEST='Value 1';export TEST;"; echo Before eval: $TEST echo '***' eval $myExports echo After eval: $TEST echo '***' 我这样称呼它: ./env1.sh ;echo Next command:$TEST 这是输出: Before eval: *** A

我想在脚本中设置一个变量,并在下一个命令的脚本之外设置它

这就是我所拥有的:

#!/bin/bash

myExports="TEST='Value 1';export TEST;";

echo Before eval: $TEST
echo '***'

eval $myExports

echo After eval: $TEST
echo '***'
我这样称呼它:

./env1.sh ;echo Next command:$TEST
这是输出:

Before eval:
***
After eval: Value 1
***
Next command:

你可以
source
你的脚本像

 #source ./env1.sh; echo Next command:$TEST
 . ./env1.sh; echo Next command:$TEST
正如@Jonathon在评论中指出的,使用
代替
源代码更便于携带

事实上,如果使用此方法,甚至不需要导出变量

执行此操作时,请小心使用变量名。即使这是你想要的,你也在污染你的环境

我不确定脚本的目的是什么,但如果可能的话,我倾向于避免
eval
。这个修改后的脚本将获得相同的结果,但我不知道你想用它做什么

#!/bin/bash

#myExports="TEST='Value 1';export TEST;";

echo Before eval: $TEST
echo '***'

TEST='Value 1'; export TEST
#eval $myExports

echo After eval: $TEST
echo '***'

我们不能在第一个脚本中从调用下一个脚本吗?并将所需变量作为命令行参数传递?如果没有,那么:您可以使用一个环境变量,或者将其写入下一个脚本可以读取的文件。我想找到一种方法,从写入文件或传递命令。我们在另一个系统上有相同类型的脚本。可能字符串变量中的代码只是为了演示,但是如果您计划在生产代码中这样做,请重新考虑。另请参阅和此处有关堆栈溢出的许多问题,这些问题链接到堆栈溢出,作为人们尝试做类似事情时遇到困难的原因的答案或解释。避免
eval
是明智的建议。使用dot(
)或C shell也一样,但Bash特定的
源代码
源代码
不是Korn shell、POSIX shell或原始Bourne shell的一部分)来读取脚本。但是,如果要将变量提供给另一个命令(无论是shell脚本还是可执行文件),则需要导出。如果变量只需要对点缀脚本的shell可用,那么就不需要导出它,但是导出通常是必需的。@jonathan这是一个很好的观点。我将导出放回并引用了。代替来源。我一直想知道为什么人们喜欢在脚本中使用它。我总是觉得在复杂的脚本中,它有点神秘。