Bash Shell导出变量,你在某个脚本中定义了一个变量,但在调用其他脚本时,该脚本并不知道这个变量的存在。
解决方案
将希望传给其他脚本的变量导出。
export MYVAR
export NAME=value
讨论
有时候,两个脚本互不知道对方的变量是件好事。如果在一个脚本的 for 循环中调用了另一个 shell 脚本,那么你肯定不希望这个脚本将 for 循环弄得乱七八糟(这种事不大可能发生,因为该脚本几乎肯定是在子 shell 中运行,这里只是举例说明)。
但有时你的确想在脚本之间传递信息。在这种情况下,你可以导出变量,使变量的值能够传递给脚本所调用的其他程序。
要想查看所有已导出的变量,敲入命令 env(或者内建命令 export -p
)就能列出各个变量及其值。当脚本运行时,这些变量都可供使用,其中很多是 bash 启动脚本已经设置好的。
你可以在 export 后面跟上变量赋值,不过这种写法不适用于比较老的 shell 版本。也可以在 export 后面跟上要导出的变量名。尽管只要把 export 语句放在待导出的值之前就行,但脚本程序员通常会将这类语句(如变量声明)一块放在脚本的起始位置。
导出之后,就可以随意给变量赋值,不用重复导出。因此,有时你会看到下列语句。
export FNAME
export SIZE
export MAX
...
MAX=2048
SIZE=64
FNAME=/tmp/scratch
还有这样的语句。
export FNAME=/tmp/scratch
export SIZE=64
export MAX=2048
...
FNAME=/tmp/scratch2
...
FNAME=/tmp/stillexported
注意,导出的变量实际上是按值调用的。在被调用脚本中修改导出变量的值并不会改变调用脚本中该变量的值。
这就产生了一个问题:“如何将被调用脚本修改过的值传回来?”答案是:做不到。
你只能设计脚本时避开这种需求。有什么办法能够应对这种限制吗?
方法之一是让被调用的脚本自己输出修改过的值,然后调用脚本读取该输出。例如,某个脚本导出了变量 $VAL
,然后调用了另一个脚本,后者修改了 $VAL
。要想在调用脚本中得到 $VAL
的新值,就得将修改后的值写入标准输出,然后获取并重新赋值。
VAL=$(anotherscript)
你甚至可以修改多个值并依次将其写入标准输出。然后调用脚本会用 read 命令逐行将其读入对应的变量。但是,这要求被调用脚本不要向标准输出中写入其他输出(至少别在此之前或期间),而且脚本之间要设置非常密切的依赖关系(从维护角度来看,这可不是什么好事)。
酷客网相关文章:
评论前必须登录!
注册