☰
Linux-环境变量
2026/10/15 11:33:49 网站建设 项目流程

1.概念

环境变量是系统提供的一组name=value形式的变量,不同的环境变量有不同的用途,环境变量通常具有全局性。

2.查看环境变量的方式

方式1:echo $环境变量名

[xxl@VM-0-2-centos 916]$ echo $USER xxl

方式2:指令[env]

方式3:使用getenv()函数,头文件#include<stdlib.h>。getenv(环境变量名)

[xxl@VM-0-2-centos 916]$ cat mycmd.c //mycmd.c的代码 #include<stdio.h> #include<stdlib.h> int main() { printf("USER:%s\n",getenv("USER")); //使用getenv查看USER环境变量 return 0; } [xxl@VM-0-2-centos 916]$ ./mycmd //执行mycmd USER:xxl

方式4:使用main函数的参数

int main(int argc,char* argv[],char* env[])

argv和env都是字符指针数组,argv内有argc个元素;argv是命令行参数表,env是环境变量表。

[xxl@VM-0-2-centos 916]$ cat mycmd.c //mycmd.c的代码 #include<stdio.h> #include<stdlib.h> int main(int argc,char* argv[],char* env[]) { int i=0; for(;env[i];i++) { printf("env[%d]->%s\n",i,env[i]); } return 0; }

方式5:第三方变量[environ],头文件#include<unistd.h>。environ是char**类型,使用时需要extern。

[xxl@VM-0-2-centos 916]$ cat test.c //test.c的代码 #include<stdio.h> #include<unistd.h> int main() { extern char** environ; int i=0; for(;environ[i];i++) { printf("%d:%s\n",i,environ[i]); } return 0; }

3.常见的环境变量

Linux的环境变量表

XDG_SESSION_ID=16249 HOSTNAME=VM-0-2-centos TERM=xterm SHELL=/bin/bash HISTSIZE=3000 SSH_CLIENT=59.42.57.163 48043 22 SSH_TTY=/dev/pts/0 USER=xxl LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/xxl PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xxl/.local/bin:/home/xxl/bin GOPROXY=https://mirrors.tencent.com/go,direct PWD=/home/xxl/917 LANG=en_US.utf8 SHLVL=1 HOME=/home/xxl LOGNAME=xxl SSH_CONNECTION=59.42.57.163 48043 10.1.0.2 22 LESSOPEN=||/usr/bin/lesspipe.sh %s PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}" XDG_RUNTIME_DIR=/run/user/1000 HISTTIMEFORMAT=%F %T _=/usr/bin/env OLDPWD=/home/xxl

PATH:指定命令的搜索路径。

HOME:指定用户的工作目录。

SHELL:当前的命令行解释器(shell),通常是/bin/bash。

HISTSIZE:历史命令被保存的条数,可以使用[history]指令查看历史命令。

HOSTNAME:主机名。

SSH_TTY:终端设备文件,可以使用echo在终端之间互相打印数据。

echo "hello" >/dev/pts/25 //将hello输入到/dev/pts/25终端上

USER:当前用户。

LS_COLORS:配色方案。

PWD:当前进程所对应的路径。

LANG:编码方案。

LOGNAME:当前登录用户。

OLDPWD:上次的路径,可以使用[cd -]切换到上次的路径。

4.和环境变量相关的指令

echo:查找某个系统变量。

echo $USER

export:设置一个新的环境变量。

export MYVAL=12345

env:显示所有环境变量。

unset:清楚环境变量。

unset MYVAL

set:显示本地变量和环境变量。

5.环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以'\0'结尾的环境字符串。

6.环境变量的全局性

我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息,子进程回继承父进程中的环境变量。

[xxl@VM-0-2-centos 916]$ cat test.c //test.c的内容 #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { printf("MYVAL:%s\n",getenv("MYVAL")); return 0; } [xxl@VM-0-2-centos 916]$ export MYVAL=54321 //创建环境变量MYVAL [xxl@VM-0-2-centos 916]$ ./test //创建并运行bash的子进程test MYVAL:54321

7.本地变量和内建命令

本地变量没有全局性,本地变量只会在bash内部有效,不会继承给子进程。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询