首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"echo“和”导出“环境变量之间的区别是什么?

"echo“和”导出“环境变量之间的区别是什么?
EN

Ask Ubuntu用户
提问于 2021-09-22 21:17:34
回答 4查看 5.8K关注 0票数 2

环境是Ubuntu 18。

如果我在/etc/ JAVA_HOME="/usr/java11"中添加一行source /etc/environment并执行D1,我可以回显这个环境变量:

代码语言:javascript
复制
echo $JAVA_HOME
/usr/java11

但是,如果我试图从导出中获得它,这个变量就不在列表中:

代码语言:javascript
复制
export | grep JAVA_HOME
--result is blank--

然后我使用export $JAVA_HOME=/usr/java8导出一个变量(注意这里是java8,而不是java 11),我可以有:

代码语言:javascript
复制
export |grep JAVA_HOME
declare -x JAVA_HOME="/usr/java8"

现在,我仍然可以将echo $JAVA_HOME作为/usr/java11 11:

代码语言:javascript
复制
echo $JAVA_HOME
/usr/java11

问:echo $variableexport | grep JAVA_HOME有什么区别?

我尝试一个简单的python程序,os.environ.get("JAVA_HOME")从导出返回“/usr/java8 8”,而不是回显。

EN

回答 4

Ask Ubuntu用户

回答已采纳

发布于 2021-09-22 21:56:54

这里的问题实际上不是echoexport之间的区别,而是环境变量和简单shell变量之间的区别(以及/etc/environment文件通常是如何使用的)。

特别是,尽管/etc/environment碰巧包含作为POSIX变量赋值有效的表单name=value的行,但它的主要用途(在现代Linux系统中)是在用户会话初始化期间由pam_env模块读取--是pam_env将它们导出到用户的环境中。

当您将/etc/environment源到您的shell中时,没有什么特殊的魔力可以告诉shell,赋值是环境变量的赋值(这些变量被导出到环境中,因此由子进程继承),而不是常规的shell变量(这些变量仅在当前shell作用域中可用)。

下次登录时,pam_env将使用它的魔力,然后JAVA_HOME将出现在export | grep JAVA_HOME的输出中。

另请参阅

票数 13
EN

Ask Ubuntu用户

发布于 2021-09-23 07:38:53

首先,echoexport是非常不同的命令。

  • echo将显示文本。在echo $JAVA_HOME中,shell将用它定义的shell变量JAVA_HOME的内容替换$JAVA_HOME。否则,$JAVA_HOME将返回一个空字符串。
  • export为shell变量提供了“导出”属性。export JAVA_HOME将设置导出属性,即变量也将在任何子shell或子进程的环境中可用,而不仅仅是在当前shell中。如果尚未设置变量,则可以在导出时定义它,如export JAVA_HOME=/usr/java11中所示。

/etc/environment中,环境变量通过变量赋值的语法注册。默认Ubuntu中的/etc/environment内容确实可以执行。因此,如果执行包括以下内容的行:

代码语言:javascript
复制
`JAVA_HOME=/usr/java11`

然后,所要做的就是将shell变量路径赋给当前值。

但是,由于您在/etc/environment中包含了变量,因此应该在系统下一次启动时有效地导出该变量。然后,它应该存在于export中,并显示在您打开的第一个终端中的echo $JAVA_HOME中。因此,您目前所观察到的是,在修改/etc/environment之后还没有重新启动机器(并且没有以其他方式导出变量)。

票数 5
EN

Ask Ubuntu用户

发布于 2021-09-23 16:33:50

在这里的其他答案的基础上,一些并行export的命令,但是对于其他类型的变量,是set (它适用于VARIABLE=value然后set | grep VARIABLE)和env

当没有参数时,这三个命令中的每一个都会打印变量列表;它们要打印的变量与命令管理的变量类型有关。

请参阅设置、导出和env的区别是什么?我应该在什么时候使用它们?

echo $VARIABLE总是工作的,因为所有类型的变量都可以作为$VARIABLE读取;但是,这意味着它没有给您提供关于它是哪种变量或它来自哪里的信息。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1365246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档