一、环境变量

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[])

参数类型含义
argcintargument count,参数个数(包含程序名本身)
argvchar *[]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;
}

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐