一、命令前置的临时环境变量
网上一搜一大把都是说 export 命令与 .bash_profile 文件的,却鲜有人提及可以在命令行语句前设置临时环境变量,并且该变量只对当前语句有效。
# usage: var=value [var2=value2 ...] script var=value sh -c 'echo $var' # 打印 value echo $var # 打印 空行,因为上面的临时环境变量已经失效 var1=value1 var2=foo sh -c 'echo $var2' # 打印 foo
ps:var=value echo $var
这句是无法打印出临时环境变量 var 的,我也搞不清为什么(参考),所以只能改用 sh -c 'echo $var'
来包装一下。
哦,我有点想通了,感觉应该是这样解释的:var=value script
这种用法,是针对后面 script 语句启动的进程,给这个新的进程设置环境变量。而 echo 是 shell 的内建命令(Builtin Command),它并不会另外启动一个进程,只会读取当前 shell 会话的环境变量。
如何验证 echo 是内建命令呢?可以通过同是内建命令的 type
指令来检查。
我一开始还用 which echo
来检查,然后却发现有的系统会输出 builtin,有的会输出 /bin/echo。原因是对于不同的系统,或者说不同 shell,which 命令本身可能是内建命令,也有可能是外部程序。如果作为外部程序,是无法识别内建命令的 echo 的。
二、当前会话内有效的环境变量
使用 export 命令,可以为当前的 shell 会话设置环境变量,并且只在当前会话内有效。
export var=foo # 添加环境变量 export test=123 echo $var # 打印 foo unset var # 删除环境变量 echo $var # 打印 空行 echo $test # 打印 123
如果另外打开一个 shell 窗口,echo 这两个新增的环境变量,都是不存在的。
三、持久存储的环境变量
就是修改 /etc/profile, ~/.bash_profile 等等这些文件,具体网上找吧。