LINUX---shell变量(或bash变量)和环境变量的区别

Shell 变量是特定于当前 shell 会话的变量。

作用范围:仅在当前 shell 会话中有效。如果你打开了多个终端窗口,每个窗口都有自己的一组 shell 变量,彼此独立。

生命周期:随着 shell 会话的结束而消失,不会传递给其他 shell 会话。

用途:用于在命令行中暂时存储数据,如临时变量或用于脚本中的数据。

设置方法:可以直接在命令行中设置,或通过脚本进行设置。

环境变量是可以在整个操作系统中被不同程序和进程共享的变量。

作用范围:在整个操作系统中都可见,供不同的程序和进程使用。

生命周期:在操作系统中持续存在,直到系统重启或手动删除。

用途:用于配置操作系统环境,如系统路径、用户配置等。

设置方法:通常通过配置文件(如 /etc/profile、~/.bashrc、~/.bash_profile)进行设置,可以使用 export 命令将 shell 变量导出为环境变量。


PATH环境变量有什么重要作用?

PATH 环境变量具有非常重要的作用。它定义了一系列目录,当用户在命令行输入一个命令时,系统会按照这些目录的顺序来搜索可执行文件。如果在这些目录中找到了对应的可执行文件,系统就会执行它。

主要作用

1.简化命令执行:用户不需要输入完整的路径就能运行程序或脚本。例如,当用户输入 ls 命令时,系统会在 PATH 环境变量定义的目录中搜索名为 ls 的可执行文件。

2.提高效率:通过将常用命令的路径添加到 PATH 中,用户可以在任何目录下直接运行这些命令,而不需要切换到特定目录。

3.灵活性:用户可以根据需要动态修改 PATH 环境变量,添加或移除目录,以适应不同的工作环境。

示例

  • 查看当前 PATH

    复制代码
    echo $PATH
  • 添加新目录到 PATH

    复制代码
    export PATH=$PATH:/new/directory/path

通过合理配置 PATH 环境变量,可以大大提高工作效率和操作的便利性。

分别在/etc/profile、~/.bash_profile 和 ~/.bashrc 设置环境变量时有什么区别?

/etc/profile、~/.bash_profile 和 ~/.bashrc 都可以用来设置环境变量,但它们的作用范围和加载时机有所不同:

/etc/profile

作用范围:系统级别。对系统中的所有用户生效。

加载时机:当用户登录时,所有兼容 POSIX 的 shell(如 Bash、sh)都会加载 /etc/profile。

用途:用于设置系统范围的环境变量和执行系统范围的初始化脚本。

~/.bash_profile

作用范围:用户级别。只对当前用户生效。

加载时机:当用户登录时,Bash shell 会加载 ~/.bash_profile。

用途:用于设置用户特定的环境变量和执行用户特定的初始化脚本。通常会包含一行代码来加载 ~/.bashrc,以确保登录 shell 也能加载 ~/.bashrc 中的配置:

~/.bashrc

作用范围:用户级别。只对当前用户生效。

加载时机:每次启动一个新的非登录交互式 shell 时,Bash shell 会加载 ~/.bashrc。例如,当你在终端中打开一个新的 shell 会话时,~/.bashrc 会被加载。

用途:用于设置用户特定的别名、函数和命令提示符等。

加载顺序和关系

登录 shell:当用户登录时,Bash shell 会按以下顺序加载配置文件:

    1. /etc/profile
    2. 用户的 ~/.bash_profile、~/.bash_login 或 ~/.profile(Bash 会按这个顺序查找并加载第一个找到的文件)

非登录交互式 shell:当用户启动一个新的非登录交互式 shell 时,Bash shell 会加载用户的 ~/.bashrc。

相关推荐
Dovis(誓平步青云)17 分钟前
《静态库与动态库:从编译原理到实战调用,一篇文章讲透》
linux·运维·开发语言
不开心就吐槽19 分钟前
linux安装kafka
linux·运维·kafka
孙同学要努力20 分钟前
《Linux篇》进程等待(wait、waitpid)与进程程序替换(exec等接口)
linux·服务器·网络
_w_z_j_37 分钟前
Linux----进程控制
linux·运维·服务器
绵羊20236 小时前
单细胞转录组测序上游——cellranger
linux
Awkwardx9 小时前
Linux系统编程—线程同步与互斥
linux·服务器
赖small强10 小时前
[Linux]内核队列实现详解
linux·kfifo·请求队列·工作队列(workqueue)·等待队列·kfifo_init
www.0211 小时前
linux服务器升级显卡驱动(笔记)
linux·运维·服务器·笔记·ubuntu·服务器环境
wdfk_prog12 小时前
[Linux]学习笔记系列 -- [kernel][time]hrtimer
linux·笔记·学习
摇滚侠12 小时前
Spring Boot3零基础教程,把 Java 程序打包为 Linux 可执行文件,笔记91
java·linux·笔记