Linux学习 -- Shell变量的作用域

  • 本地变量
  • 环境变量
  • 局部变量

一、本地变量

我们在命令行中定义的变量是局部变量,它是不会永久保留的,会随着shell的切换 而丢失 当前存储的变量。如图所示。

        当我们在bash中定义变量name并赋值,退出当前bash进程后,重新进入bash,想再次获取我们定义的name,发现已经消失。说明shell进程中 的变量,随着进程的切换,变量丢失。

二、环境变量

也称为全局变量,针对当前shell以及其任意子进程,环境变量也分自定义、内置两种。

1、内置变量是Shell解释器或者操作系统提前定义好的变量来供我们使用,一般都是大写的。

        如: $USER    $HOME    $PWD    $SHELL

2、自定义变量

        用户根据自己需求进行自定义变量。

       如: name="王大"

下图显示,我们在环境变量(父)中定义一个变量后,进入一个bash进程(子)中,想要获取变量,发现没有,当我们返回到环境变量中,获取变量,获取成功。

        既说明了不同作用域中获取变量的权限是不同的,又说明了环境变量中的变量是 可以存储的,只有当重启虚拟机才会丢失。

我们在环境变量中定义的变量,子bash中仍然可以访问,当我们在子bash进程中定义和环境变量名相同的变量,会被覆盖,输出为子bash进程中的变量。

当我们在子进程中使用unset 变量名,来撤销这个变量,子bash进程中无法获取自己进程的变量和环境进程中的变量。

三、局部变量

针对在shell函数或是shell脚本中定义
就是我们在.sh的shell脚本中或者shell函数中定义的变量,完成我们的某种需求,

        如:   #!/bin/bash

                  name="王大锤"

                  echo  "$name"

变量获取的 时候,只会获取离自己近的作用域的变量。

当自己的定义域内没有该变量 ,但是要输出该变量,这时候会自动向大的变量进行寻找,然后输出。

1.每次调用bash/sh解释器执行脚本,都会开启一个子shell,因此不保留当前的shell变量,通过pstree命令检查进程树
2.调用source或者点符号,在当前shell环境加载脚本,因此保留变量

3、全局变量和局部变量类似父子级别的关系。不同的作用域下,可以拿到的值是不同的。

4、本地变量:就是只针对当前shelll进程的变量。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值