脚本执行后导出的变量不会保留

Modified on: Sat, 12 Oct 2019 06:00:02 +0800

我面临着一个奇怪的问题。
我有一个使用solaris 11的虚拟机,并尝试编写一些bash脚本。

如果,在shell上,我输入:

export TEST=aaa

然后运行:

set

我正确地看到一个名为TEST的新环境变量,其值为aaa。
但是,如果我在脚本中基本上做同样的事情。当脚本终止时,我没有看到变量集。
举一个具体的例子,如果在test.sh文件中我有:

#!/usr/bin/bash echo 1: $TEST #variable not defined yet, expect to print only 1: echo 2: $USER TEST=sss echo 3: $TEST export TEST echo 4: $TEST

打印:

1: 2: daniele 3: sss 4: sss

并且在执行之后,未在shell中设置TEST。
我错过了什么吗?
我试过两个都做导出TEST = sss和单独的变量set / export没有区别。

作者:Daniele

最佳答案

export - 使变量可用于子进程,但不能用于父进程。

source - 在shell中运行脚本而不创建子进程

对于exalmpe,可以通过写入文件

来实现持久变量

#!/usr/bin/bash echo 1: $TEST #variable not defined yet, expect to print only 1: CONFIGFILE=~/test-persistent.vars if [ -r ${CONFIGFILE} ]; then # Read the configfile if it's existing and readable source ${CONFIGFILE} fi echo 2: $TEST echo 3: $USER TEST=sss echo 4: $TEST echo TEST="$TEST"> ${CONFIGFILE} echo 5: $TEST

作者:,mmv-ru

相关问答

添加新评论