shell环境变量

一、全局环境变量、局部环境变量

  1. 局部(本地)环境变量

生效范围:仅限当前正在运行的Shell会话,新开子Shell、别的终端窗口都读取不到这个变量
创建示例:

bash

local_var=“我是局部变量”
echo $local_var
bash # 进入子shell
echo $local_var # 空白无输出,子进程拿不到父shell的普通局部变量
生命周期:关闭当前终端/Shell会话,变量直接销毁,不会自动持久保存

  1. 全局(导出型)环境变量

创建方式:局部变量搭配 export 命令导出升级为全局变量

bash

global_var=“全局测试内容”
export global_var

生效规则:能向下传递给由当前Shell启动的所有子Shell、子进程;反过来子Shell修改、重新export该变量,无法改动父Shell里原始数值(进程内存互相隔离,子进程数据不会向上回写)
局限:仅本次终端会话有效,系统重启、重开终端后变量会消失,想要永久生效需要写入Shell启动文件

二、PATH环境变量(命令检索路径)

核心作用

Shell执行一条普通命令(比如 ls 、 python )时,不会漫无目的全盘搜程序,会按PATH里冒号 : 分隔的目录顺序挨个查找对应可执行文件,找到就运行,全部目录检索不到就报「未找到命令」。

查看PATH

bash

echo $PATH

示例输出:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

实用场景举例

自己编译的程序放在 /opt/my_app/bin ,直接输程序名系统识别失败;把目录追加进PATH后就能直接调用:

bash

export PATH=$PATH:/opt/my_app/bin

易错提醒

不要直接写 PATH=/opt/my_app/bin ,会清空系统原有检索目录,内置 ls 、 cd 等基础命令会暂时失效。

三、bash启动文件 ~/.bashrc(会话持久化配置)

文件定位
代表当前登录用户的家目录, ~/.bashrc 是单用户专属、交互式Shell启动时自动读取执行的脚本文件(文件名开头 . 代表隐藏文件)。

功能

  1. 终端新开一个bash会话(打开SSH窗口、本地终端),bash会自动加载 .bashrc 内部代码
  2. 把 export 环境变量 、自定义别名 alias 、PATH追加规则写进 .bashrc ,每次开终端会自动完成配置,摆脱「临时export重启失效」的问题

实操步骤

  1. 用文本编辑器打开文件: vim ~/.bashrc ,末尾补充配置:

bash

export my_variable=“持久化的全局变量”

  1. 加载改动让本次终端立刻生效(不用重启终端):

bash

source ~/.bashrc

  1. 新开终端测试,变量可以正常读取,达成永久配置效果

补充区分:系统级配置 /etc/bashrc 是对系统全部用户生效; .bashrc 仅针对当前登录用户

四、Shell数组变量使用

普通变量单次只能存1份数据,数组可以在一个变量名下批量存放多条数据,bash下标从0开始计数。

  1. 数组创建两种写法

bash

写法1:括号空格分隔赋值

arr=(“苹果” “香蕉” “橙子”)

写法2:按下标逐个赋值

fruit[0]=“西瓜”
fruit[1]=“葡萄”

  1. 读取数据

bash

echo ${arr[0]} # 取出第1个元素:苹果
echo ${arr[@]} # 一次性输出数组所有元素
echo ${#arr[@]} # 获取数组内元素总个数(结果为3)

  1. 遍历数组(循环打印全部内容)

bash

for item in ${arr[@]}
do
echo $item
done

  1. 修改、删除元素

bash

arr[1]=“蜜桃” # 把下标1的香蕉替换成蜜桃
unset arr[2] # 删除下标2的橙子
unset arr # 清空整个数组

示例截图: