Shell 环境变量

查看更多可以参考 https://www.tutorialspoint.com/unix/unix-environment.htm 链接

环境变量(environment variable)

环境变量用来存储Shell会话或者工作环境的信息

  • 全局环境变量
  • 局部环境变量

全局环境变量

全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的 shell可见

用来查看全局变量的指令(2选1,两者都可以)

  • env
  • printenv

printenv + env_variable 可以查看个别 环境变量的值,而env却不可以

1
2
3
% printenv HOME
/Users/lingxiao
%

或者 echo 也可以,但是必须加上$

1
2
3
% echo $HOME
/Users/lingxiao
%

创建全局环境变量

使用 export 关键字 把局部环境变量转成全局环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
% lcoalVar="LocalVariable"
% echo $lcoalVar
LocalVariable
% zsh #启动一个子shell
This is .zshrc shell script ...
% echo $lcoalVar # 可以看到子Shell 无法访问 局部变量

% globalVar="gloableVar"
% export globalVar #把局部变量转成全局变量
% zsh #启动一个子shell
This is .zshrc shell script ...
% echo $globalVar #可以看到在子Shell 中能够访问 全局环境变量
gloableVar

通过上述案例,可以看到,通过export把局部变量转成全局变量,但这种改变仅仅对子shell 有效子Shell 也无法使用export命令去改变父shell中的全局环境变量的值, 接着上述案例来呈现这一特点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% echo $globalVar
gloableVar
% zsh #启动一个子shell
This is .zshrc shell script ...
% globalVar="sub change parent var"
% echo $globalVar
sub change parent var
% export globalVar
% echo $globalVar
sub change parent var
% exit #退出这个子shell
% echo $globalVar #再一次输出的值仍是之前gloabl的环境变量
gloableVar
%

删除环境变量

继续上面的例子分析,使用unset来删除已经存在的环境变量

1
2
3
4
5
6
% echo $globalVar 
sub change parent var
% unset globalVar # 删除环境变量
% echo $globalVar

%

在涉及环境变量名时,什么时候该使用,什么时候不该使用,什么时候不该使用,实在让人摸不着头脑。 记住一点就行了**:如果要用到变量,使用$;如果要操作变量,不使用$**。这条规则的一 个例外就是使用printenv显示某个变量的值。

注意

  1. 如果在子Shell中删除一个全局环境变量,则只对子进程有效

默认的环境变量

设置PATH环境变量

PATH环境变量定义了用于执行命令和程序查找的目录

PATH 是系统默认的全局环境变量,其定义了可执行文件所在的目录,当我们在终端输入一个指令的时候,该指令会去PATH环境变量定义的程序目录中查找,如果找到则执行,否则报错。

1
2
3
 % echo $PATH
/Users/local/.pyenv/shims:/Users/local/.pyenv/bin:/Users/local/miniconda3/bin:/Users/local/.nvm/versions/node/v20.10.0/bin:/usr/local/opt/ruby@3.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/local/lua-5.3.0:/Library/Apple/usr/bin:/Users/local/.gem/ruby/3.1.0/bin
%

PATH中的目录使用冒号(:)分隔;

当应用程序的可执行文件目录不在PATH环境变量包含的目录中,我们需要把其添加到PATH环境变量中

1
PATH=$PATH:/Your/Program/Path

Shell的启动流程

  1. etc/profile

    系统自动启动时候就会执行

  2. $HOME/.zshrc

    这里至于应该执行哪一个脚本,取决于你的Shell类型

    这这个文件中,我们可以把自己需要配置的全局环境变量写在这个文件里,用来进行持久化的操作


Shell 环境变量
https://jackiedai.github.io/2024/09/04/007unix_shell/001-环境变量/
Author
lingXiao
Posted on
September 4, 2024
Licensed under