The Student Asked: 2011-02-15 05:08:52 +0800 CST2011-02-15 05:08:52 +0800 CST 2011-02-15 05:08:52 +0800 CST 环境变量 vs Shell 变量,有什么区别? 772 有人告诉我: BASH 不是环境变量,它是 shell 变量 有什么不同? bash 5 个回答 Voted Lekensteyn 2011-02-15T05:19:50+08:002011-02-15T05:19:50+08:00 环境变量是全局可用的,在程序及其子程序中。shell 变量仅在当前 shell 中可用。要使 shell 变量可用作环境变量,请使用export VARNAME(不带美元$)。 澄清示例: $ SOME=VAR # define shell variable $SOME $ echo $SOME VAR $ env | grep SOME # note: no output $ export SOME # turn $SOME into an environment variable $ env | grep SOME SOME=VAR 定义环境变量的另一种方法: $ export ANOTHER=VALUE $ echo $ANOTHER VALUE $ env | grep ANOTHER ANOTHER=VALUE Best Answer Takkat 2011-02-15T05:29:42+08:002011-02-15T05:29:42+08:00 $BASH是仅在当前 (bash) shell 中有效的局部变量。 诸如在$SHELL系统范围内有效的环境变量。在当前的 Bash shell 中,$BASH指向bash的执行路径,而$SHELL指向定义为默认的 shell(可能具有相同的值)。 有关环境变量的说明,请参阅Ubuntu 帮助中的环境变量。 Peter.O 2011-02-15T05:23:45+08:002011-02-15T05:23:45+08:00 它们是有区别的。Shell 变量和环境变量将尽我所能更好地解释它,但这里是它的摘录: 如果对 shell 变量进行了更改,则必须将其显式“导出”到相应的环境变量,以便任何分叉的子进程都能看到更改。回想一下,shell 变量对于定义它们的 shell 来说是本地的。 Ashish 2016-07-07T12:39:08+08:002016-07-07T12:39:08+08:00 外壳变量:短期,仅适用于外壳的当前实例,不适用于系统范围 环境变量:长期使用、系统范围内有效、全球允许 按照惯例,Shell 变量的名称为小写,而 Envn。变量写成大写 Vishrant 2017-12-24T11:21:48+08:002017-12-24T11:21:48+08:00 要回答这个问题,首先尝试了解变量的范围。 当您创建一个新变量时,就像SOME_ENV_VARIABLE="testing.txt"它驻留在 中一样SHELL scope,这意味着它可以由用户登录的 shell 实例访问。当实例更改时,例如您打开一个新终端或更改 shell(例如切换到csh) 您无法访问该变量。 当您导出该变量时export SOME_ENV_VARIABLE,该变量现在在环境范围内可用,这意味着在该实例中,如果您更改 shell,您仍然可以访问该变量。让我们尝试通过以下示例来理解: [vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell [vishrant@localhost]$ echo $SOME_ENV_VARIABLE testing.txt [vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment [vishrant@localhost]$ env | grep SOME_ENV_VARIABLE SOME_ENV_VARIABLE=testing.txt [vishrant@localhost]$ csh #changing shell [vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE testing.txt [vishrant@localhost ~/shell_scripting]$ exit exit #returned to parent shell [vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt" [vishrant@localhost]$ csh [vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE SOME_SHELL_VARIABLE: Undefined variable. 类比:假设你有一个两居室的公寓,你和另一个室友合租。任何人都可以访问公共区域,但不能访问您的卧室,环境变量就像公共区域,shell 变量就像卧室,如果您在公共区域有任何东西,任何人都可以访问它,但如果您将它放在卧室中,它只能由您访问。 请记住,如果打开一个新终端,您将无法访问任何一个变量,因为您正在更改该实例。为此,您应该在.profile或中添加变量.bashrc(如果您使用的是 bash)。
环境变量是全局可用的,在程序及其子程序中。shell 变量仅在当前 shell 中可用。要使 shell 变量可用作环境变量,请使用
export VARNAME
(不带美元$
)。澄清示例:
定义环境变量的另一种方法:
$BASH
是仅在当前 (bash) shell 中有效的局部变量。诸如在
$SHELL
系统范围内有效的环境变量。在当前的 Bash shell 中,$BASH
指向bash的执行路径,而$SHELL
指向定义为默认的 shell(可能具有相同的值)。有关环境变量的说明,请参阅Ubuntu 帮助中的环境变量。
它们是有区别的。Shell 变量和环境变量将尽我所能更好地解释它,但这里是它的摘录:
外壳变量:短期,仅适用于外壳的当前实例,不适用于系统范围
环境变量:长期使用、系统范围内有效、全球允许
按照惯例,Shell 变量的名称为小写,而 Envn。变量写成大写
要回答这个问题,首先尝试了解变量的范围。
当您创建一个新变量时,就像
SOME_ENV_VARIABLE="testing.txt"
它驻留在 中一样SHELL scope
,这意味着它可以由用户登录的 shell 实例访问。当实例更改时,例如您打开一个新终端或更改 shell(例如切换到csh
) 您无法访问该变量。当您导出该变量时
export SOME_ENV_VARIABLE
,该变量现在在环境范围内可用,这意味着在该实例中,如果您更改 shell,您仍然可以访问该变量。让我们尝试通过以下示例来理解:类比:假设你有一个两居室的公寓,你和另一个室友合租。任何人都可以访问公共区域,但不能访问您的卧室,环境变量就像公共区域,shell 变量就像卧室,如果您在公共区域有任何东西,任何人都可以访问它,但如果您将它放在卧室中,它只能由您访问。
请记住,如果打开一个新终端,您将无法访问任何一个变量,因为您正在更改该实例。为此,您应该在
.profile
或中添加变量.bashrc
(如果您使用的是 bash)。