Linux环境变量详解:全局变量、局部变量、PATH配置与数组变量
一、什么是环境变量环境变量Environment Variable是存储在内存中的键值对VARIABLE_NAMEvalue其值在程序外部设置通常通过操作系统或微服务内置的功能设置。环境变量由名称/值对组成可以在任何时间点进行引用。通俗理解环境变量就像是操作系统的“全局配置参数”程序和命令可以直接读取使用用来知道“系统在哪里、怎么运行、默认配置是什么”。环境变量的作用存储有关shell会话和工作环境的信息让程序或shell中运行的脚本能够快速访问数据存储持久数据的一种简便方法二、全局环境变量与局部环境变量在bash shell中环境变量分为两类2.1 全局环境变量全局环境变量对于shell会话和所有生成的子shell都是可见的。查看全局变量的命令bashenv # 显示所有全局环境变量printenv # 显示所有全局环境变量printenv 变量名 # 显示指定全局变量echo $变量名 # 显示指定变量的值示例操作bash查看所有全局环境变量env使用printenv查看printenv查看特定变量如HOMEprintenv HOMEecho $HOME2.2 局部环境变量局部环境变量只能在定义它们的进程中可见。⚠️ 注意Linux系统没有一个只显示局部环境变量的专门命令。set命令会显示为某个特定进程设置的所有环境变量包括局部变量、全局变量以及用户定义变量。查看所有变量包括局部变量 bashset # 显示所有变量局部全局用户定义三、用户创建和删除环境变量3.1 创建局部变量用户可以通过等号给环境变量赋值值可以是数值或字符串。语法bash变量名值重要规则变量名、等号和值之间不能有空格变量名区分大小写系统环境变量通常使用全大写字母自己创建的变量建议使用小写字母避免与系统变量冲突如果要赋一个含有空格的字符串值必须用单引号或双引号括起来示例bash创建局部变量my_variable“Hello World”查看局部变量echo $my_variable给同一变量赋新值覆盖原值my_variable“New Value”echo $my_variable3.2 创建全局变量使用export创建全局环境变量的方法先创建一个局部环境变量再通过export命令把它导出到全局环境中。语法bashexport 变量名或直接在export时赋值export 变量名值示例bash方法一先创建局部变量再导出my_variable“Hello Global”export my_variable方法二直接创建并导出export my_global“Direct Export” 重要理解子shell中修改全局环境变量不会影响父shell中该变量的值。这是因为子shell继承的是父shell环境变量的副本而不是引用。3.3 删除环境变量使用unset使用unset命令可以删除已经存在的环境变量。语法bashunset 变量名⚠️ 关键区别在unset命令中引用环境变量时不要使用$ 。如果要用到变量的值使用如果要操作变量本身不使用如果要操作变量本身不使用如果要操作变量本身不使用示例bash删除变量unset my_variable验证是否已删除echo $my_variable # 输出为空四、练习题1环境变量查看与父子shell实验实验目的熟悉env、printenv、set命令的使用理解父子shell中环境变量的继承关系操作步骤Step 1查看env的输出bashenvStep 2查看printenv的输出bashprintenvStep 3查看set的输出bashsetStep 4在父shell中查看$PWD变量bashecho $PWDStep 5进入子shell在子shell中查看$PWD变量bashbash # 进入子shellechoKaTeX parse error: Expected EOF, got # at position 9: PWD #̲ 查看PWDexit # 退出子shell五、练习题2用户自定义全局变量实验实验目的掌握创建局部变量和全局变量的方法理解export命令的作用理解父子shell变量隔离的特性操作步骤Step 1在父shell中设置变量并export导出至全局环境bashmy_variable“I am Global”export my_variableecho $my_variable # 验证变量已设置Step 2进入子shell中查看设置的变量bashbashecho $my_variable # 应该显示 “I am Global”Step 3在子shell中给变量赋新值bashmy_variable“NULL”echo $my_variable # 显示 “NULL”Step 4在子shell中使用export将赋新值的变量导出并查看bashexport my_variableecho $my_variable # 显示 “NULL”Step 5退出子shell查看父shell中的该变量值bashexit # 退出子shellecho $my_variable # 仍然显示 “I am Global” 结论子shell修改全局环境变量不会影响父shell中该变量的值。六、环境变量的持久化~/.bashrc用上述方式定义的环境变量重新启动Shell后就会被删除。如果希望变量永久存在需要在系统自启动文件~/.bashrc中进行配置。操作步骤bash编辑.bashrc文件vim ~/.bashrc在文件末尾添加以下内容export my_variable“Hello World”保存并退出:wq使配置立即生效source ~/.bashrc验证echo $my_variable # 显示 “Hello World”七、PATH环境变量7.1 什么是PATH当你在shell命令行界面中输入一个外部命令时shell必须搜索系统来找到对应的应用程序。PATH环境变量定义了用于进行命令和程序查找的目录。PATH中的目录使用冒号: 分隔。查看PATHbashecho $PATH7.2 为什么有些命令可以直接输入像bash、ls、cd等命令可以直接输入调用是因为这些命令所在的目录如/usr/bin/已经被写入到PATH环境变量中。7.3 如何添加自定义目录到PATH临时添加仅当前会话有效 bashexport PATH$PATH:/your/custom/path⚠️ 注意一定要用$PATH:追加新目录而不是直接覆盖。如果直接写成export PATH/your/path会覆盖原有PATH导致系统命令无法使用永久添加写入~/.bashrc bashvim ~/.bashrc在文件末尾添加export PATH$PATH:/your/custom/pathsource ~/.bashrc八、存放系统环境变量的文件当你登录Linux系统启动一个bash shell时bash会在启动文件或环境文件中查找命令。8.1 登录shell的启动文件登录shell会从以下5个不同的启动文件里读取命令文件 作用范围 说明/etc/profile 系统所有用户 系统级主启动文件每个用户登录时都会执行$HOME/.bash_profile 当前用户 用户级配置登录时执行一次$HOME/.bash_login 当前用户 用户级配置备选$HOME/.profile 当前用户 用户级配置备选$HOME/.bashrc 当前用户 每次打开新的bash shell时都会读取8.2 执行顺序登录shell执行启动文件的顺序为text/etc/profile → ~/.bash_profile → ~/.bash_login → ~/.profile → ~/.bashrc 建议用户自定义的环境变量通常放在~/.bashrc中这样每次打开新的终端都会生效。九、数组变量Bash Shell只支持一维数组不支持多维数组。环境变量可作为数组使用这些值可以单独引用也可以作为整个数组来引用。9.1 定义数组Shell数组用括号() 来表示元素用空格分隔basharray_name(value_1 value_2 … value_n)9.2 访问数组元素引用数组中某个元素的值需要使用索引值索引从0开始bash${array_name[index]}显示整个数组变量可用星号* 作为通配符bash${array_name[*]}9.3 修改和删除数组元素bash修改数组中某个索引位置的值array_name[index]new_value删除数组中的某个值保留索引位置unset array_name[index]删除整个数组unset array_name十、练习题3数组变量操作实验目的掌握数组的定义、访问、修改和删除操作步骤Step 1建立一个多组员名称的数组bashmembers(Zhang San Li Wang Wu)echo ${members[*]} # 显示所有成员echo ${members[0]} # 显示第一个成员 Zhangecho ${members[1]} # 显示第二个成员 SanStep 2更改一位成员bashmembers[1]“Si”echo ${members[*]} # 显示更新后的数组Zhang Si Li Wang WuStep 3删除一位成员bashunset members[2] # 删除索引为2的元素Liecho ${members[*]} # 显示Zhang Si Wang WuStep 4删除整个数组bashunset membersecho ${members[*]} # 输出为空

相关新闻