Shell 的环境变量分为两种:
set:可以显示和设置shell私有变量,仅在本 shell 中有效。不同shell(bash、csh)私有变量不同。
env:可以显示和设置用户环境变量 ,仅在当前会话中有效。
另外set 变量可以通过 export 工具导入到 env 变量中:
export:显示或设置当前导出成用户变量的shell变量。
区别
两种变量不同之处在于变量的作用域不同,env 变量的作用域更大,它可以被所有shell使用。
也就是说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。
示例
_SET="var_set" # 设定一个shell变量_SET
echo $_SET # 查看是否成为shell私有变量
var_set
set | grep "var_set"
_SET=var_set
env | grep "var_set" # 没有结果,说明变量_SET不在env用户环境变量中
export _SET # export导出变量_SET到env中
env | grep "var_set" # 再查看,变量_SET已经存在env中
_SET=var_set
export | grep _SET # 查看export中的变量
declare -x _SET="var_set"
清除set变量
unset _SET
set | grep "var_set" # 取消后不存在_SET
export | grep "var_set" # 取消后不存在
env | grep "var_set" # 取消后不存在
设置只读变量
readonly _SET
_SET="set_var" # 不能被修改
-bash: _SET: readonly variable
unset _SET # 不能被清除
-bash: unset: _SET: cannot unset: readonly variable