shell 和环境变量之间的区别
- 2024-10-21 09:14:00
- admin 原创
- 89
问题描述:
shell 变量和环境变量有什么区别?这些变量存储在哪里?
解决方案 1:
援引该消息来源,
标准 UNIX 变量分为两类:环境变量和 shell 变量。广义上讲,shell 变量仅适用于 shell 的当前实例,用于设置短期工作条件;环境变量具有更深远的意义,在登录时设置的变量在会话期间有效。按照惯例,环境变量的名称为大写,shell 变量的名称为小写。
要列出所有环境变量,请使用printenv
和 要列出所有 shell 变量,请使用set
。
您会注意到环境变量存储了更多永久值,例如:
HOME=/home/adam
它很少改变,而 shell 变量存储本地的、临时的、特定于 shell 的值,例如:
PWD=/tmp
每次您改变当前目录时它都会改变。
export VARIABLE_NAME=VALUE
对于大多数实际任务,通过添加到 ~/.bashrc 文件来设置环境值。
解决方案 2:
对于 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/终端,您将看不到您定义的变量,这是符合进程局部性的原则。
如何创建持久的 shell 变量:
一种方法是修改~/.profile文件:
export SHELL_VAR=xyz
此设置是用户特定的,而不是系统范围的,对于系统范围的环境变量,您可以将上述行添加到/etc/profile.d中的.sh文件中
我强烈建议阅读这个页面:EnvironmentVariables
解决方案 3:
它们的区别类似于Java类中私有字段和受保护字段的区别。
Java 类的私有字段只能从该 Java 类访问。Java 类的受保护字段可从该 Java 类及其子类访问。
shell 的 shell 变量只能从该 shell 进程访问。从该 shell 导出的环境变量可从该 shell 进程和从该 shell 创建的子进程访问。
解决方案 4:
除了其他答案中的信息之外,环境变量不像 shell 变量那样灵活。
Shell 变量可以是数组或关联数组,但环境变量只能是字符串。子进程继承的环境只是一串字符串name=value
。没有对值的解析,因此无法指示值应该是数组。
解决方案 5:
shell 变量只是环境变量的一个特例。shell 变量从环境中继承,并可能根据所使用的语法复制到 shell 子级的环境中:
http://www.pixelbeat.org/docs/env.html
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件