shell和环境变量之间的区别

时间:2010-07-27 07:07:28

标签: linux bash shell unix environment-variables

shell和环境变量之间有什么区别? 这些变量存储在哪里?

4 个答案:

答案 0 :(得分:21)

引用this source

  

标准UNIX变量被拆分为   两类,环境变量   和shell变量。从广义上讲,   shell变量仅适用于   shell的当前实例和   习惯于短期工作   条件;环境变量有   更深远的意义,和   登录时设置的有效   会议持续时间。通过   约定,环境变量有   UPPER CASE和shell变量都有   小写名称。

要列出所有环境变量,请使用printenv并列出所有shell变量,使用set

您会注意到环境变量存储更多永久值,例如:

HOME=/home/adam

很少有变化,而shell变量存储本地,临时,特定于shell的值,例如:

PWD=/tmp

每次更改当前目录时都会更改。

对于大多数实际任务,通过将export VARIABLE_NAME=VALUE添加到〜/ .bashrc文件来设置环境值。

答案 1 :(得分:9)

它们的区别类似于Java类中私有字段和受保护字段之间的区别。

只能从该Java类访问Java类的私有字段。可以从Java类及其子类访问Java类的受保护字段。

shell的shell变量只能从该shell进程访问。从该shell导出的环境变量可以从该shell进程和从该shell创建的子进程访问。

答案 2 :(得分:4)

对于Bash shell:

Shell变量以不同的方式与环境变量不同:

♦shell变量特定于shell本身,不会被子进程继承。例如,假设您正在从shell运行另一个应用程序,该应用程序将不会继承shell变量:

$ SHELL_VAR=xyz
$ firefox

SHELL_VAR在子进程(firefox)的环境中不可用。

♦相反,父进程的环境变量(此处为shell)由所有子进程继承:

$ export SHELL_VAR=xyz
$ firefox

♦shell和环境变量都是定义它们的shell /进程的本地变量:

环境变量可以是持久的,而对于shell变量,一旦退出会话,它们就会全部消失。

注意:以上示例仅改变您正在处理的shell,换句话说,如果您注销或启动新的shell /终端,您将不会看到您定义的变量,这是按流程局部性的原则。

如何制作presistent shell变量:

一种方法是修改〜/ .profile 文件:

export SHELL_VAR=xyz

此设置是特定于用户的,而不是系统范围的,对于系统范围的环境变量,您可以将以上行添加到 /etc/profile.d中的 .sh 文件中。

我强烈建议您阅读此页面:EnvironmentVariables

答案 3 :(得分:-1)

shell变量只是环境变量的一个特例。 shell变量是从环境继承的,可能根据使用的语法复制到shell的子环境中: http://www.pixelbeat.org/docs/env.html