为何执行Bash脚本设置环境变量后,echo输出为空?
问题原因及解决办法
原因
直接运行./example.sh时,脚本会在子Shell进程中执行。子Shell内部通过export设置的环境变量,仅在该子Shell及其衍生的子进程中有效,无法传递回启动它的父Shell(即你当前操作的终端Shell)。脚本执行完毕退出后,父Shell中的VAR变量仍未被设置,因此echo $VAR输出为空。
解决方法
在当前Shell中执行脚本:使用
source命令(或其缩写.)运行脚本,让脚本的操作直接作用于当前Shell进程:source ./example.sh && echo $VAR # 等价写法 . ./example.sh && echo $VAR这样脚本里的
export操作会直接修改当前Shell的环境变量,执行后就能得到预期的abc输出。简化脚本逻辑:利用Bash的参数展开特性,可以把脚本简化为一行,同时保留原有逻辑:
#!/bin/bash export VAR=${VAR:-abc}${VAR:-abc}的含义是:若VAR未设置或为空字符串,则将其设为abc;若VAR已有有效值,则保持不变。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

