Linux环境变量在shell下继承

问题:在不同的账户终端上或者子shell使用变量,思考变量的有效范围,并查阅环境变量是如何在不同的shell下继承的?

1. 变量的有效范围

变量在 shell 中的有效范围主要分为两种:局部变量环境变量

  • 局部变量

    • 只在定义它的当前 shell 或子 shell 中有效。
    • 例如,使用 var=value 定义的变量是局部的,无法在子 shell 或其他终端中访问。
  • 环境变量

    • 可以被子 shell 和其他进程继承。

    • 通过 export 命令可以将局部变量转换为环境变量,例如:

      var=value
      export var

  • 现在,var 在当前 shell 及其所有子 shell 中都可用。

2. Shell 变量的作用域示例

  • 局部变量示例

    在当前 shell 中定义一个局部变量

    my_var="Hello"
    echo $my_var # 输出 Hello

    启动一个子 shell

    (
    echo my_var # 仍然输出 Hello my_var="World" # 在子 shell 中修改 echo my_var # 输出 World
    )

    返回到父 shell,my_var 仍然是 Hello

    echo $my_var # 输出 Hello

环境变量示例

复制代码
# 在当前 shell 中定义并导出环境变量
my_env_var="Hello"
export my_env_var

# 启动一个子 shell
( 
  echo $my_env_var  # 输出 Hello
  my_env_var="World"  # 修改环境变量
  echo $my_env_var  # 输出 World
)

# 返回到父 shell
echo $my_env_var  # 仍然输出 Hello,因为父 shell 的环境变量未被修改

3. 环境变量的继承机制

当启动新的 shell 时,环境变量会被继承。具体流程如下:

  • 登录 Shell :当你通过登录(例如 SSH 或打开一个终端)进入系统时,系统会读取 /etc/profile 或用户主目录下的 ~/.bash_profile 等配置文件,这些文件中定义的环境变量会被设置为当前 shell 的环境变量。

  • 非登录 Shell :当你在一个已经打开的 shell 中启动新的 shell(例如通过输入 bashsh)时,该新 shell 会继承当前 shell 的所有环境变量。

  • 子 Shell:无论是通过脚本还是在命令行中创建子 shell,环境变量都会被传递给子 shell。

  • 环境变量与局部变量的区别

    • 环境变量是从父进程传递给子进程的,而局部变量只在当前 shell 会话中可用,不会传递给子进程。

4. 查阅和管理环境变量

  • 查看环境变量 :使用 printenvenv 命令可以列出当前所有的环境变量

  • 查看特定变量 :可以使用 echo 命令查看特定变量的值:

    echo $MY_ENV_VAR

  • 删除环境变量 :可以使用 unset 命令删除某个变量:

    复制代码
    unset MY_ENV_VAR

总结

  • 变量的有效范围在当前 shell、子 shell 和进程之间是不同的。局部变量只能在定义它的 shell 中使用,而环境变量可以在子 shell 和新进程中访问。
  • 环境变量的设置和继承机制确保了在不同 shell 会话中变量的传递,理解这些概念对于脚本编写和系统管理至关重要。
相关推荐
花嫁代二娃28 分钟前
Linux:环境变量
linux
乌托邦的逃亡者1 小时前
Docker的/var/lib/docker/目录占用100%的处理方法
运维·docker·容器
ldj20202 小时前
Jenkins 流水线配置
运维·jenkins
古希腊数通小白(ip在学)4 小时前
stp拓扑变化分类
运维·服务器·网络·智能路由器
Muxiyale4 小时前
使用spring发送邮件,部署ECS服务器
java·服务器·spring
l1x1n06 小时前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim
12点一刻6 小时前
搭建自动化工作流:探寻解放双手的有效方案(2)
运维·人工智能·自动化·deepseek
未来之窗软件服务6 小时前
东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE
运维·人工智能·自动化·仙盟创梦ide·东方仙盟·阿雪技术观
FreeBuf_7 小时前
微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据
服务器·microsoft·pdf
lixzest7 小时前
C++ Lambda 表达式详解
服务器·开发语言·c++·算法