shell 之 export

1 export命令的引入:

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。所以export命令的引入是为了我们定义一个变量时可以在子shell中被调用,而不需要重复去定义。

2 export命令的使用

Linux export命令用于设置或显示环境变量,在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。

语法:

export [-fnp][变量名称]=[变量设置值]

参数说明:

-f  代表[变量名称]中为函数名称。
-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p  列出所有的shell赋予程序的环境变量。

列出当前所有的环境变量

export -p
<think>我们在讨论Shell脚本中的export命令。根据引用,export用于设置环境变量,使其对当前Shell及其进程可见。在脚本中使用export,可以确保变量在脚本调用的进程(如另一个脚本或命令)中可用。 步骤: 1. 定义变量:先给变量赋值。 2. 使用export:用export将变量导出为环境变量。 3. 在进程中访问:在Shell进程中,该环境变量可被使用。 注意点: - 如果不使用export,变量仅存在于当前Shell进程无法访问。 - export的效力仅限于当前登录会话(或当前Shell及其进程),退出后失效。 示例脚本: ```bash #!/bin/bash # 定义变量 MY_VAR="Hello World" # 导出变量 export MY_VAR # 现在可以调用其他脚本或命令,它们将能访问MY_VAR echo "在父脚本中: $MY_VAR" # 调用脚本 ./child_script.sh ``` 创建脚本`child_script.sh`: ```bash #!/bin/bash echo "在脚本中: $MY_VAR" ``` 运行父脚本,脚本将输出`Hello World`。 另外,可以在同一行导出并赋值: ```bash export MY_VAR="Hello World" ``` 若要删除一个已导出的环境变量(使其不再被进程继承),可以使用`export -n`: ```bash export -n MY_VAR ``` 注意:`export -n`只是取消导出,变量本身在当前Shell中仍然存在。若要完全删除变量,使用`unset`命令: ```bash unset MY_VAR ``` 引用说明: - 环境变量的设置对进程可见[^1][^2][^3]。 - Shell脚本运行时创建Shell,通过export传递变量值[^4]。 相关问题: 1. 如何让环境变量永久生效? 2. 除了export,还有哪些方法可以在Shell脚本之间传递数据? 3. 环境变量和普通变量在Shell脚本中的区别是什么?</think>### Shell脚本中正确使用`export`命令的方法 在Shell脚本中,`export`命令用于将变量设置为**环境变量**,使其对**当前Shell及其所有进程**可见。这是实现脚本间数据传递和配置共享的关键机制。 #### 基本用法 1. **定义并导出变量**(常用方式): ```bash export MY_VAR="value" # 定义变量并立即导出 ``` 2. **先定义后导出**: ```bash MY_VAR="value" # 定义普通变量(仅当前Shell可见) export MY_VAR # 提升为环境变量(进程可见) ``` #### 关键特性 1. **作用范围**: - 导出的变量对当前Shell启动的所有进程(如其他脚本、命令)可见[^1][^4] - 变量修改后需重新导出才能更新进程的值 ```bash # 父脚本 parent.sh export CONFIG_PATH="/etc/app.conf" ./child.sh # 脚本可访问 CONFIG_PATH ``` 2. **临时性**: - 导出的变量仅在当前Shell会话有效,退出后失效[^3] - 永久生效需写入配置文件(如 `~/.bashrc`) 3. **查看环境变量**: ```bash export -p # 列出所有已导出的变量[^3] ``` #### 实际应用示例 **场景:跨脚本共享配置** ```bash # config.sh export DB_HOST="192.168.1.100" export DB_PORT=5432 # main.sh source config.sh # 加载配置 python run_app.py # Python脚本可通过 os.getenv("DB_HOST") 获取值 ``` #### 注意事项 1. **变量删除**: ```bash export -n MY_VAR # 取消导出(变量仍存在但不被进程继承)[^3] unset MY_VAR # 彻底删除变量 ``` 2. **函数导出**: ```bash my_func() { echo "Hello"; } export -f my_func # 导出函数给Shell使用[^3] ``` 3. **避免覆盖**: - 导出的变量可能覆盖进程的同名变量 - 建议使用大写命名(如 `APP_CONFIG`)减少冲突 #### 与普通变量的区别 | 特性 | 普通变量 | export导出的变量 | |---------------|---------------|---------------------| | 作用范围 | 仅当前Shell | 当前Shell+所有进程[^4] | | 进程可见性 | ❌ 不可见 | ✅ 可见 | | 持久性 | 会话结束消失 | 会话结束消失 | > 当Shell脚本启动时,系统会创建Shell执行脚本。未导出的变量如同私有财产,进程无法继承;而导出的变量则成为共享遗产,进程自动获得副本[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值