Linux环境变量
啥是环境变量?
环境变量就是能影响程序运行的动态值,在Linux里超级重要,管系统配置和程序执行。学会玩转它们,系统管理和开发就轻松多了!
先搞懂Shell变量
先从简单的shell变量入手,摸清Linux变量的门道。
打开终端,例如在
/home/labex/project目录。:bashcd /home/labex/project创建个shell变量,直接给名字赋值:
bashmy_var="Yo, Linux"注意:赋值时等号(
=)两边别加空格,不然会报错!想看值,用
echo加$:bashecho $my_var应该蹦出:
Yo, Linux还能把变量塞进其他命令:
bashecho "看看my_var:$my_var"输出:
看看my_var:Yo, Linux
这就整了个shell变量。不过,它只在当前终端管用,新开终端就没了。环境变量这时候就派上用场。
理解环境变量
环境变量是能让子进程(比如脚本、程序)访问的变量,比shell变量牛。
瞅瞅当前所有环境变量:
bashenv输出一堆变量,别慌,后面聊重点。
最硬核的环境变量是
PATH,看看:bashecho $PATHPATH列出系统找程序的目录,冒号(:)隔开,后续详解PATH。整一个自己的环境变量,用
export:bashexport MY_ENV_VAR="我是个环境变量"export让变量能被子进程用,这就是它跟shell变量的区别。看区别,写个脚本试试。用
cat和heredoc整脚本:bashcat << 'EOF' > test_vars.sh #!/bin/bash echo "Shell变量:$my_var" echo "环境变量:$MY_ENV_VAR" EOF赋予脚本执行权限:
bashchmod +x test_vars.sh运行脚本:
bash./test_vars.sh你会看到
MY_ENV_VAR能用,my_var不行。因为my_var没导出,子进程不认识。确认
MY_ENV_VAR是环境变量:bashenv | grep MY_ENV_VAR应该能看到你的变量。
直接查值:
bashecho $MY_ENV_VAR
用export的变量能被子进程用,普通shell变量不行。
小知识:
- Shell变量只在当前终端管用。
- 环境变量(
export出来的)能被子进程用。- 新终端不继承当前终端的变量,除非写进启动文件(比如
.zshrc)。
后面教你咋让变量永久生效。
玩转PATH变量
PATH指定系统找命令的目录,改它能让你在任何地方跑自定义脚本。
先看当前
PATH:bashecho $PATH像
/usr/local/bin:/usr/bin:/bin这样。建个目录放脚本:
bashmkdir ~/my_scripts~是主目录,等于/home/labex。切过去,写个脚本:
bashcd ~/my_scripts nano hello.sh在
nano里输入:bash#!/bin/bash echo "嗨,我的脚本!"保存退出:
Ctrl+X,Y,Enter。运行脚本:
bashchmod +x hello.sh不加权限,运行会报“权限拒绝”。
把
my_scripts加到PATH:bashexport PATH="$PATH:$HOME/my_scripts"现在随便哪儿都能跑脚本:
bashhello.sh应该输出:
嗨,我的脚本!试试换个目录跑:
bashcd /tmp hello.sh照样能跑!这就是
PATH的魔法,系统会在PATH列的目录里找命令。
让变量永久生效
现在设置的变量,关终端就没了。想一直用,得加到shell配置文件。我们用的是Zsh(比Bash高级,macOS默认壳),所以改.zshrc。用Bash的话得改.bashrc,别搞错!
用
nano打开.zshrc:bashnano ~/.zshrc~是主目录,文件不存在会新建。每次开新终端,这文件都会跑。滚到文件底,加这几行:
bashexport MY_ENV_VAR="我是个环境变量" export PATH="$PATH:$HOME/my_scripts"确认没拼错,等号左右没空格。
保存退出:
Ctrl+X,Y,Enter。不关终端就生效,用
source:bashsource ~/.zshrcsource在当前终端跑配置文件,直接生效。不然得重开终端。
现在每次开终端,这些变量都自动设置。
认识几个重要环境变量
Linux有些内置环境变量,系统运行靠它们:
HOME:当前用户主目录。bashecho $HOMEUSER:当前用户名。bashecho $USERSHELL:默认shell。bashecho $SHELLPWD:当前目录路径(Print Working Directory)。bashecho $PWDTERM:模拟的终端类型。bashecho $TERM
知道这些,能更好搞定Linux环境。
删除环境变量
想删环境变量?用unset。
先看
MY_ENV_VAR还在不:bashecho $MY_ENV_VAR应该看到之前的值。
删掉它:
bashunset MY_ENV_VAR确认删了:
bashecho $MY_ENV_VAR没输出,说明没了。
保险点,用
-v确保删变量不是函数:bashunset -v MY_ENV_VAR效果一样。
注意:如果你添加变量到.zshrc里,下次开终端或source .zshrc,它会回来。
总结
简单总结一下:
- shell变量,要明白它们的作用域。
- 搞懂环境变量跟shell变量的区别,
export是关键,能让子进程用。 - 改了
PATH,让脚本随便哪儿都能跑,冒号:分隔得记牢。 - 在
.zshrc里永久设置变量,懂了Bash和Zsh区别,source让变化秒生效。 - 重点学习Linux内置重要变量。
- 用
unset删变量,干净利落。