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 会话中变量的传递,理解这些概念对于脚本编写和系统管理至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值