科普:设置环境变量的命令:set 与 export

setexport 都是用于设置变量的命令,但它们的 适用环境作用范围功能 有本质区别,核心差异在于 是否将变量提升为“环境变量”(可被子进程继承) 以及 支持的操作系统/shell

一、set 命令:主要用于“设置shell变量”或“临时变量”

set 是一个跨shell的基础命令,但在不同环境中功能略有差异:

1. 在 Linux/macOS 的 shell(如 bash、zsh)中:
  • 功能:主要用于 定义“shell变量”(局部变量),或显示当前shell中的所有变量。

  • 特点

    • 通过 set 变量名=值 定义的变量,仅在当前shell会话中有效,但 不会被子进程继承(即不是“环境变量”)。
    • 子进程(如在当前shell中启动的脚本、程序)无法读取这些变量。
  • 示例:

    # 在bash中用set定义变量
    set TEST_VAR="hello"  #特别注意:等号两侧留空格( set TEST_VAR = "hello" )是错误的
    echo $TEST_VAR  # 输出:hello(当前shell可见)
    
    # 启动子进程(新的bash),检查变量是否可见
    bash -c 'echo $TEST_VAR'  # 输出空(子进程不可见,因为不是环境变量)
    
2. 在 Windows 的 CMD 命令提示符 中:
  • 功能:用于 设置“临时环境变量”(仅在当前CMD会话中有效)。

  • 特点

    • 通过 set 变量名=值 定义的变量,是环境变量,可被当前CMD会话中的子进程继承(如启动的程序、脚本)。
    • 关闭CMD窗口后,变量失效(非永久)。
  • 示例:

    :: 在CMD中用set定义变量
    set TEST_VAR=hello
    echo %TEST_VAR%  # 输出:hello(当前CMD可见)
    
    :: 启动子进程(如Python脚本),可读取该变量
    python -c "import os; print(os.getenv('TEST_VAR'))"  # 输出:hello(子进程可见)
    

二、export 命令:仅用于“导出环境变量”(Linux/macOS 专属)

exportLinux/macOS 的 shell(如 bash、zsh) 特有的命令,Windows 系统(CMD/PowerShell)不支持

  • 核心功能:将“shell变量”提升为“环境变量”,使其 可被子进程继承

  • 两种用法

    1. 直接定义并导出环境变量:export 变量名=值
    2. 先定义shell变量,再导出:变量名=值; export 变量名
  • 示例:

    # 方法1:直接定义并导出
    export TEST_VAR="hello"
    
    # 方法2:先定义,再导出
    TEST_VAR="hello"
    export TEST_VAR
    
    # 当前shell可见
    echo $TEST_VAR  # 输出:hello
    
    # 子进程可见(环境变量的核心特性)
    bash -c 'echo $TEST_VAR'  # 输出:hello(子进程可读取)
    

在 Linux/macOS 中,通过 export 命令设置的环境变量 默认是临时的,仅在当前 shell 会话(终端窗口)中有效,关闭终端后就会失效。

如何实现永久生效?
若需让 export 设置的环境变量永久生效(即每次打开终端都自动加载),需将 export 命令写入 shell 的配置文件中。不同 shell(如 bash、zsh)的配置文件不同,常见的有:

  • bash shell~/.bashrc(非登录 shell)或 ~/.bash_profile(登录 shell)
  • zsh shell~/.zshrc
  • 通用~/.profile(部分系统支持)

步骤:
① 编辑配置文件(以 bash 为例):
bash nano ~/.bashrc # 或用 vim、gedit 等编辑器
② 在文件末尾添加 export 命令:
bash export API_KEY="123456" # 你的环境变量设置
③ 保存并退出编辑器,执行以下命令让配置立即生效(无需重启终端):
bash source ~/.bashrc # 或 . ~/.bashrc

此后,每次打开新终端,该环境变量都会自动加载。

三、二者区别总结

维度set(Linux/macOS bash)export(Linux/macOS bash)set(Windows CMD)
适用系统Linux/macOS(bash/zsh等)Linux/macOS(bash/zsh等)Windows(CMD命令提示符)
变量类型局部shell变量(非环境变量)环境变量(可被子进程继承)临时环境变量(可被子进程继承)
子进程可见性不可见可见可见
持久性仅当前shell会话有效仅当前shell会话有效仅当前CMD会话有效
典型用途定义shell内部临时变量定义需被子进程使用的环境变量(如API密钥)定义当前CMD会话中需用的临时环境变量
  1. Windows 中没有 export
    Windows 的 CMD/PowerShell 中用 set 设置临时环境变量,用 setx 或图形界面设置永久环境变量(参考前文),没有 export 命令。

  2. 环境变量的核心特性是“可继承”
    无论是 export(Linux)还是 set(Windows CMD)设置的环境变量,核心作用是让子进程(如脚本、程序)能读取到,这是与普通局部变量的本质区别。

  3. 持久性与临时性

    • setexport 定义的变量默认都是“临时的”(当前会话有效),关闭终端后失效。
    • 若需永久生效,需写入配置文件(Linux 写入 ~/.bashrc,Windows 通过 setx 或图形界面)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值