Skip to content

Linux环境变量

啥是环境变量?

环境变量就是能影响程序运行的动态值,在Linux里超级重要,管系统配置和程序执行。学会玩转它们,系统管理和开发就轻松多了!

先搞懂Shell变量

先从简单的shell变量入手,摸清Linux变量的门道。

  1. 打开终端,例如在/home/labex/project目录。:

    bash
    cd /home/labex/project
  2. 创建个shell变量,直接给名字赋值:

    bash
    my_var="Yo, Linux"

    注意:赋值时等号(=)两边别加空格,不然会报错!

  3. 想看值,用echo$

    bash
    echo $my_var

    应该蹦出:Yo, Linux

  4. 还能把变量塞进其他命令:

    bash
    echo "看看my_var:$my_var"

    输出:看看my_var:Yo, Linux

这就整了个shell变量。不过,它只在当前终端管用,新开终端就没了。环境变量这时候就派上用场。

理解环境变量

环境变量是能让子进程(比如脚本、程序)访问的变量,比shell变量牛。

  1. 瞅瞅当前所有环境变量:

    bash
    env

    输出一堆变量,别慌,后面聊重点。

  2. 最硬核的环境变量是PATH,看看:

    bash
    echo $PATH

    PATH列出系统找程序的目录,冒号(:)隔开,后续详解PATH

  3. 整一个自己的环境变量,用export

    bash
    export MY_ENV_VAR="我是个环境变量"

    export让变量能被子进程用,这就是它跟shell变量的区别。

  4. 看区别,写个脚本试试。用catheredoc整脚本:

    bash
    cat << 'EOF' > test_vars.sh
    #!/bin/bash
    echo "Shell变量:$my_var"
    echo "环境变量:$MY_ENV_VAR"
    EOF

    赋予脚本执行权限:

    bash
    chmod +x test_vars.sh

    运行脚本:

    bash
    ./test_vars.sh

    你会看到MY_ENV_VAR能用,my_var不行。因为my_var没导出,子进程不认识。

  5. 确认MY_ENV_VAR是环境变量:

    bash
    env | grep MY_ENV_VAR

    应该能看到你的变量。

  6. 直接查值:

    bash
    echo $MY_ENV_VAR

export的变量能被子进程用,普通shell变量不行。

小知识

  • Shell变量只在当前终端管用。
  • 环境变量(export出来的)能被子进程用。
  • 新终端不继承当前终端的变量,除非写进启动文件(比如.zshrc)。

后面教你咋让变量永久生效。

玩转PATH变量

PATH指定系统找命令的目录,改它能让你在任何地方跑自定义脚本。

  1. 先看当前PATH

    bash
    echo $PATH

    /usr/local/bin:/usr/bin:/bin这样。

  2. 建个目录放脚本:

    bash
    mkdir ~/my_scripts

    ~是主目录,等于/home/labex

  3. 切过去,写个脚本:

    bash
    cd ~/my_scripts
    nano hello.sh

    nano里输入:

    bash
    #!/bin/bash
    echo "嗨,我的脚本!"

    保存退出:Ctrl+XYEnter

  4. 运行脚本:

    bash
    chmod +x hello.sh

    不加权限,运行会报“权限拒绝”。

  5. my_scripts加到PATH

    bash
    export PATH="$PATH:$HOME/my_scripts"
  6. 现在随便哪儿都能跑脚本:

    bash
    hello.sh

    应该输出:嗨,我的脚本!

  7. 试试换个目录跑:

    bash
    cd /tmp
    hello.sh

    照样能跑!这就是PATH的魔法,系统会在PATH列的目录里找命令。

让变量永久生效

现在设置的变量,关终端就没了。想一直用,得加到shell配置文件。我们用的是Zsh(比Bash高级,macOS默认壳),所以改.zshrc。用Bash的话得改.bashrc,别搞错!

  1. nano打开.zshrc

    bash
    nano ~/.zshrc

    ~是主目录,文件不存在会新建。每次开新终端,这文件都会跑。

  2. 滚到文件底,加这几行:

    bash
    export MY_ENV_VAR="我是个环境变量"
    export PATH="$PATH:$HOME/my_scripts"

    确认没拼错,等号左右没空格。

  3. 保存退出:Ctrl+XYEnter

  4. 不关终端就生效,用source

    bash
    source ~/.zshrc

    source在当前终端跑配置文件,直接生效。不然得重开终端。

现在每次开终端,这些变量都自动设置。

认识几个重要环境变量

Linux有些内置环境变量,系统运行靠它们:

  1. HOME:当前用户主目录。

    bash
    echo $HOME
  2. USER:当前用户名。

    bash
    echo $USER
  3. SHELL:默认shell。

    bash
    echo $SHELL
  4. PWD:当前目录路径(Print Working Directory)。

    bash
    echo $PWD
  5. TERM:模拟的终端类型。

    bash
    echo $TERM

知道这些,能更好搞定Linux环境。

删除环境变量

想删环境变量?用unset

  1. 先看MY_ENV_VAR还在不:

    bash
    echo $MY_ENV_VAR

    应该看到之前的值。

  2. 删掉它:

    bash
    unset MY_ENV_VAR
  3. 确认删了:

    bash
    echo $MY_ENV_VAR

    没输出,说明没了。

  4. 保险点,用-v确保删变量不是函数:

    bash
    unset -v MY_ENV_VAR

    效果一样。

注意:如果你添加变量到.zshrc里,下次开终端或source .zshrc,它会回来。

总结

简单总结一下:

  1. shell变量,要明白它们的作用域。
  2. 搞懂环境变量跟shell变量的区别,export是关键,能让子进程用。
  3. 改了PATH,让脚本随便哪儿都能跑,冒号:分隔得记牢。
  4. .zshrc里永久设置变量,懂了Bash和Zsh区别,source让变化秒生效。
  5. 重点学习Linux内置重要变量。
  6. unset删变量,干净利落。