【Linux笔记】Linux环境变量
·
一、环境变量
1.1 什么是环境变量
环境变量:是操作系统中用于存储系统或应用程序配置信息的键值对,指定操作系统运行环境的参数
核心功能:它们为进程提供运行时的上下文信息,例如当前用户、主目录路径、命令搜索路径等。
注:每个进程启动时都会继承父进程的环境变量。
1.2 环境变量相关命令
1.2.1 env — 显示当前环境变量
env # 列出所有环境变量(KEY=VALUE 格式) 示例: hamber@VM-0-14-ubuntu:~$ env SHELL=/bin/bash HISTSIZE=1000 LANGUAGE=en_US.utf8: PWD=/home/hamber LOGNAME=hamber HOME=/home/hamber LANG=en_US.UTF-8 USER=hamber PATH=/home/hamber/.nvm/versions/node/v20.20.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin SSH_TTY=/dev/pts/0 _=/usr/bin/env OLDPWD=/home/hamber/code ...
常见的环境变量
| 变量名 | 含义 | 示例值 |
|---|---|---|
PATH | 可执行文件搜索路径 | /usr/local/bin:/usr/bin:/bin |
HOME | 当前用户主目录 | /home/username |
USER | 当前用户名 | username |
SHELL | 当前使用的 shell | /bin/bash |
PWD | 当前工作目录 | /home/username/projects |
LANG | 系统语言/字符集 | en_US.UTF-8 |
EDITOR | 默认文本编辑器 | vim |
HOSTNAME | 主机名 | VM-0-14-ubuntu |
LD_LIBRARY_PATH | 动态库搜索路径 | /usr/local/lib |
1.2.2 echo — 展开变量
echo $HOME # 简单展开 hamber@VM-0-14-ubuntu:~$ echo $HOME /home/hamber
1.2.3 export — 设置环境变量
export MY_VAR="hello" #临时设置环境变量 hamber@VM-0-14-ubuntu:~$ export MY_VAR="hello" hamber@VM-0-14-ubuntu:~$ echo $MY_VAR hello
1.2.4 readonly — 设置只读环境变量
export APP_MODE="production" #临时设置环境变量 readonly APP_MODE #将环境变量设置为只读 APP_MODE="staging" # bash: APP_MODE: readonly variable unset APP_MODE # bash: unset: APP_MODE: cannot unset: readonly variable
1.2.5 unset — 删除环境变量
unset MY_VAR # 删除变量 unset VAR1 VAR2 VAR3 # 同时删除多个 unset -v MY_VAR # 明确指定删除变量 示例: hamber@VM-0-14-ubuntu:~$ env | grep MY_VAR MY_VAR=hello hamber@VM-0-14-ubuntu:~$ unset MY_VAR hamber@VM-0-14-ubuntu:~$ env | grep MY_VAR
1.3 持久化配置
根据 shell 类型和作用范围,选择不同的配置文件:
Bash 用户:大多数 Linux
| 文件 | 作用范围 | 加载时机 |
|---|---|---|
/etc/environment | 全系统所有用户 | 系统启动时 |
/etc/profile | 全系统所有用户 | 登录 shell 启动 |
~/.bash_profile | 当前用户 | 登录 shell 启动 |
~/.bashrc | 当前用户 | 非登录交互式 shell |
/etc/profile.d/*.sh | 全系统(推荐放自定义脚本) | 登录时自动 source |
# ~/.bashrc — 非登录交互式 shell echo 'export MY_VAL = "hello" ' >> ~/.bashrc #shell退出时,环境变量不会消失 # 使修改立即生效 source ~/.bashrc
二、main函数命令行参数
2.1 main 函数的标准参数
C/C++ 语言中,main 函数接收命令行参数的标准形式为:
int main(int argc, char *argv[])
| 参数 | 类型 | 含义 |
|---|---|---|
argc | int | argument count,参数个数(包含程序名本身) |
argv | char *[] | argument vector,参数字符串数组 |
例如:执行命令 ./myapp -v hello "foo bar" 时:
argc = 4 argv[0] → "./myapp" ← 程序名(始终是第一个元素) argv[1] → "-v" ← 第1个用户参数 argv[2] → "hello" ← 第2个用户参数 argv[3] → "foo bar" ← 引号内的空格被保留为一个参数 argv[4] → NULL ← 标准保证:argv[argc] == NULL
关键规则:
argc >= 1,至少包含程序名。
argv[argc]一定是NULL指针(C 标准明确规定)。Shell 在传参之前已完成变量替换、通配符展开和引号去除,程序收到的是处理后的纯字符串。
2.2 基本使用示例
代码示例:打印所有参数
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("参数个数: %d\n", argc);
for (int i = 0; i < argc; i++)
{
printf("argv[%d] = \"%s\"\n", i, argv[i]);
}
return 0;
}
$ ./demo alpha beta gamma 参数个数: 4 argv[0] = "./demo" argv[1] = "alpha" argv[2] = "beta" argv[3] = "gamma"
2.3 第三种参数 ---envp
int main(int argc, char *argv[], char *envp[])
解析:每个环境变量参数
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
// envp 是以 NULL 结尾的字符串数组,每项格式为 "KEY=VALUE"
for (int i = 0; envp[i] != NULL; i++)
{
printf("%s\n", envp[i]);
}
return 0;
}
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)