环境变量是什么?

1,566

前言

很久没有发布对外的技术文档了。看了下掘金的记录上一篇写技术文档已经是11月以前了。
为什么要写这篇文章呢?一般搭建开发环境都是需要我们配置环境变量,一些小白不知道什么是环境变量,就算配置了也不知道到底是配置了个啥,也不清楚系统是怎么使用环境变量。

什么是环境变量

我们先来说一说变量的概念。
变量来源于数学,计算机语言中能储存计算结果或能表示值的抽象概念。
相信编程的同学都知道变量是什么。接下来我们来看一段 js 的代码。

    var age = 11;
    var name = 'james';
    
    console.log(`${name} is ${age} years old`);

在上面这段代码,我们声明了两个变量,一个是age、一个是name,它们的作用很简单,就是表示一个值,age表示年龄,name表示名字。
声明了变量之后我们再去使用它们,比如console.log打印的那一段话。
那么到底什么是环境变量呢?它跟普通的变量的作用是一样的,就是表示一个值,有一个不同的是,agename是语言级别的变量,而环境变量是电脑系统级别的变量,基本任何编程语言都可以拿到电脑的环境变量,可以利用环境变量做很多事情。

编程语言怎么拿到环境变量

这是介绍一下怎么通过编程语言拿到环境变量。这是使用的编程语言是nodejsnodejs有一个内置模块叫processprocess有一个属性叫env,我们就可以通过这个env属性去拿到本地的环境变量,我们可以发现,env就是英语单词环境的缩写。
环境变量的值是以字符串的形式存储的,并且有一个不成文的规范,就是都是大写字母,有多个单词可以使用_分隔。

var HOME = process.env['HOME'];
var PATH = process.env['PATH'];

console.log(HOME);
console.log(PATH);

运行以上的代码,就可以把HOME、PATH这两个环境变量打印到控制台。 其他比较热门的编程语言,也挺容易拿到环境变量的,只是写法不一样而已。

怎么查看环境变量

WindowsMac查看本机的环境变量还是有很多差异的。

Windows

在“系统属性”界面,选择“高级”,在高级界面选择“环境变量”,即可打开变量配置界面。

image.png

接下来就是环境变量的面板。这里划分了两种环境变量,用户变量和系统变量。

  • 用户变量:本质上就是环境变量,但只在当前的用户生效。比如说,我们都知道一个电脑是可以有很多种用户的,这台电脑登录了其他账户,那么用户变量也就跟着改变了。
  • 系统变量:本质上就是环境变量,无论你登录了哪个用户,他都是生效的。因此,把那些和用户无关的变量定义在这里。

image.png
我们可以看到,这个面板还支持新建、编辑、删除的功能,只是增删改查面面俱到。🐂🍺

Mac

直接在终端输入env命令就可以列出所有的环境变量了。Windows的很多配置都做成可视化的,Mac的使用命令行会比较多,应该它的终端就默认有很多Linux的命令,这一点用起来非常的方便。

$ env
SHELL=/bin/zsh
HOME=/Users/wuhaojian
LOGNAME=wuhaojian
USER=wuhaojian
...

常见的环境变量有哪些?

  • HOME 作用:指定用户的主工作目录。
    笔者用的是mac电脑,所以我本级的HOME/Users/wuhaojian。如果你用的是Windows电脑,那应该是C:/Users/wuhaojian

  • USER 作用:指定用户的名字。
    那我的电脑当然是wuhaojian了。

  • PATH (重点) 作用:指定命令的搜索路径。
    注意:这个在Windows的环境变量面板上,叫Path
    这个就是让很多小白很头疼的地方,一般下载个开发软件,都要配置PATH的环境变量。它是与终端有关的一个环境变量,终端输入一个命令,如果不是内部命令,则会去PATH下找相应名称的文件去执行,如果找不到则报错。
    假设有一种情况,你要下载一个npm包,然后在终端敲打了npm install vue这个命令,当出现npm不是内部或外部命令,也不是可运行的程序,就证明环境变量没有配置好。

  1. 什么是内部命令? 就是计算机自带的一些命令,不用下载,就可以直接使用的命令。Windows有dir、cd、ifconfig等等,Mac上就更多了,有ls、pwd、cd、cat等等。

  2. 什么是外部命令?

就是你下载的可执行文件,不是电脑自带的命令都是外部命令,比如npm命令,它的文件名称在Windows上是npm.cmd、在Mac是npm。

  1. 什么是可执行程序?
    上面说的内部命令和外部命令都是可执行程序。可执行程序本质上就是一个文件,你可以运行这个文件,然后系统就会帮你做一些事情。可执行文件在Windows一般是.cmd结尾,也可以是不带后缀的,在Mac上一般都是不带后缀的。像test.txt、test.json这些文件,就不是可执行文件了。试图去执行一个非可执行文件就会报错。
    所以应该怎么解决这个问题呢?
    假如,你的npm.cmd安装在/Users/wuhaojian/node/npm.cmd,你就得把可执行文件的目录/Users/wuhaojian/node添加到环境变量PATH里面去,这是当你执行npm的时候,系统就会去找环境变量PATH,然后系统发现有/Users/wuhaojian/node,就会去这里面找npm.cmd,所以命令在这时就可以成功执行了。

实践

制造自己的命令

掌握了环境PATH变量的作用之后,就可以简单的制造属于自己的命令了。
假设,你的工作路径在/Users/wuhaojian/workspace,你在这里新建一个文件叫hello,然后编辑它,如下代码所示。然后给hello文件添加一个可执行权限(因为文件被创建的时候默认是非可执行文件,这个是文件的属性,可以随机切换),chmod +x ./hello

#!/usr/bin/env node

console.log('hi');

下一步,把/Users/wuhaojian/workspace配置到环境变量PATH里面去。这时候重启一下终端,就可以在终端上敲hello,然后终端就会打印hi
注意:这个是nodejs程序,首先电脑必须配置好node环境。脚手架vue-cli都是这么来的。