我们先看一下维基百科上对环境变量的定义:环境变量是一个动态命名的值,可以影响计算机上进程的行为方式。例如一个正在运行的进程可以查询TEMP环境变量的值,以发现一个合适的位置来存储临时文件,或者查询HOME或USERPROFILE变量,以找到运行该进程的用户所拥有的目录结构。
环境变量是一种变量,同代码中的变量一样,变量包含变量名和变量值。
相信很多人和我一样,第一次接触环境变量时是在学习某一门编程语言时,安装开发环境的时候需要配置环境变量。比如在 Java 中,先从 Oracle 公司的官网上下载了 JDK,安装后还需要配置JAVA_HOME环境变量,指向 JDK 的安装目录。
在这里,
JAVA_HOME就是变量名,JDK安装目录就是变量值。
这个时候,很多人就会问,为什么要搞这么麻烦,就不能像普通应用软件(如微信、QQ)那样,运行安装程序后直接用不就行了,配什么环境变量嘛!
确实,IDE 确实可以内置一个 JDK,这样在该 IDE 中调试、运行 Java 代码时,直接使用 IDE 内置的 JDK 即可,这样就不需要再配置JAVA_HOME环境变量了。
但是,通常有个问题,就是 IDE 和 JDK 是不同的公司开发的,所以 IDE 中内置的 JDK 版本可能不是你想要的,这就会带来麻烦。另外,你电脑上可能会需要同时安装多个版本的 JDK,因为你正在开发的那几个项目是基于不同的 Java 版本开发的。而通过环境变量,我们就可以做到 IDE 和 JDK 之间的“解耦”,电脑上可以同时安装多个版本的 JDK,并且 JDK 可以安装于电脑的任何目录下,而我们需要做的就只有通过JAVA_HOME环境变量告诉 IDE 使用哪个 JDK。
像代码中的变量一样,环境变量的存在让本来是“死”的东西(即环境变量的值)变得“活”起来。这样更加灵活,也更加方便。
环境变量的常见用途
我们曾在之前的文章《C 语言番外:怎么用 C 语言做网站?》中使用过环境变量,当用户向我们的 CGI 程序发送 HTTP 请求时,服务器程序就是把用户请求中的参数放到了环境变量中,然后调用 CGI 程序,CGI 程序通过环境变量读取到用户的参数。
把程序需要用到的一些参数(如数据库连接信息、API 密钥等)放到环境变量中也是一种非常常见的场景。比如数据库连接信息(包括数据库密码),我们一般会有两个数据库,一个用于开发,一个用于生产。把不同的数据库连接信息分别配置到开发环境和生产环境后,可以做到同一个程序可以不改任何代码就既可以在开发环境运行也可以在生产环境运行。同时,数据库连接信息配置在环境变量中后,代码中就不需要体现数据库连接信息了,这也可以避免数据库敏感信息泄露,前些年就出现过有公司的代码开源到 GitHub,因为代码中有数据库连接信息而导致的用户数据泄露新闻。
还有一些其他使用场景,就不再一一列举了,感兴趣的可以自己查一下。
系统环境变量和用户环境变量
在 Windows 上设置环境变量时,会看到有两种环境变量,一种是系统环境变量,一种是用户环境变量,这里讲一下这两种环境变量的区别。
先说结论:无论是在 Windows 还是 在 macOS 或 Linux 上,都存在系统环境变量和用户环境变量,但是对于个人用户来说,这两种环境变量没有任何区别的。
因为我们使用的操作系统都是“多用户”操作系统,操作系统中的管理员用户可以创建其他用户。系统环境变量是对使用本系统的所有用户都生效的环境变量,用户环境变量则是只对当前登录的用户生效的环境变量。个人电脑上虽然可以创建多个用户,但大部分人只建一个用户(就是第一次安装系统后配置的那个用户),所以对于这种情况,不管是系统环境变量还是用户环境变量其实都是只对这同一个用户生效的。
PATH 环境变量
在环境变量中,有一个特殊的环境变量叫做PATH,它的值是电脑上的一些目录。当我们在命令行中输入一个命令时,操作系统会到PATH环境变量中配置的目录下查找有没有这个命令,如果有则执行。
如果在PATH中配置的目录中没有找到这个命令,Windows 就会输出“XXX不是内部或外部命令”,而 macOS 则会输出“command not found”(即找不到该命令)。遇到这种情况时,我们只需要把这个命令所在的目录配置到PATH环境变量中即可。
所以,PATH环境变量是非常重要的,它可以让我们在命令行中直接执行一些系统命令,而不需要每次都指定命令的完整路径。
这里有个特别需要注意的地方,在 Windows 上,修改
PATH环境变量时,应该在旧的PATH值里面拼上要添加的目录,而不要一整个都改掉。至于原因就不再赘述了。
在 macOS 上配置环境变量
最后再说一下在 macOS 上怎么配置用户级别的PATH环境变量。需要注意的是,在 Windows 上,PATH环境变量中的路径是用分号;隔开的,而在 macOS 上则是用冒号:隔开的。
还有一点是,从 2019 年 10 月发布的 macOS Catalina(10.15) 开始,macOS 上默认的 Shell 从bash变为了zsh。bash中用户级的环境变量可以在~/.bash_profile文件中配置,而在zsh中,用户级的环境变量可以在~/.zshrc文件中配置。
所以要根据你的系统版本来选择在不同的配置文件中配置环境变量。用户家目录中默认是没有这个配置文件的,首次配置需要创建这个文件。这里以zsh环境为例。
- 先确认一下配置文件是否存在。
1
ls -a ~/.zshrc
执行这个命令后,如果输出/Users/你的用户名/.zshrc,则表明该文件存在。如果输出ls: /Users/你的用户名/.zshrc: No such file or directory,则表明该文件不存在。
- 如果配置文件不存在,则需要创建该文件,如果文件存在则跳到步骤3
1
touch ~/.zshrc
- 使用文本编辑工具(建议用你喜欢的 IDE,比如 Visual Studio Code)编辑
~/.zshrc文件,在其中添加你需要配置的环境变量。比如:
1
export PATH=$PATH:/opt/homebrew/bin/
这里配置的环境变量是PATH,它的值是$PATH:~/bin,表示在原来的PATH值后面添加/opt/homebrew/bin/目录。
- 修改完
~/.zshrc文件后,环境变量对新打开的命令行窗口就生效了。对于已经打开的命令窗口,可以使用以下命令立即生效:
1
source ~/.zshrc
由于 Windows 上配置环境变量都是图形界面操作,所以这里就不展开讲了。
