Linux中设置和显示环境变量 您所在的位置:网站首页 linux查询环境变量值 Linux中设置和显示环境变量

Linux中设置和显示环境变量

2023-12-16 17:48| 来源: 网络整理| 查看: 265

在Linux和Unix系统中,环境变量是一组被动态命名值,存储在系统中,供在shell或子shell中启动的应用程序使用。简单来说,环境变量就是具有名称和相应关联值的变量。

环境变量允许你自定义系统的工作方式和系统中应用程序的行为。例如,环境变量可以存储有关默认文本编辑器或浏览器、可执行文件的路径或系统语言环境和键盘布局设置的信息。

环境变量和Shell变量

变量具有以下形式:

KEY=value KEY="Some other value" KEY=value1:value2 变量的名称是区分大小写的。按照惯例,环境变量应该使用大写名称。当给变量赋多个值时,必须用冒号:字符分隔。等号=周围没有空格。

变量可以被归类为两类,环境变量和Shell变量。 环境变量是在系统范围内可用的变量,并由所有派生的子进程和shell继承。 Shell变量是仅应用于当前shell实例的变量。每个shell(如zsh和bash)都有自己的一组内部shell变量。

用于设置和展示环境变量的指令: env 该命令允许您在自定义环境中运行另一个程序,而无需修改当前环境;当不带参数时,打印当前环境变量列表。printenv 打印所有环境变量或者指定的环境变量。set 设置或者取消设置Shell变量;不带参数使用时,他将打印包含环境变量和Shell变量的所有变量列表,以及Shell函数。unset 删除Shell变量和环境变量。export 设置环境变量。

使用示例:

printenv LANG PWD #输出环境变量LANG和PWD printenv #输出所有环境变量 set #输出所有环境变量、Shell变量以及Shell函数 set | less #直接调用输出太多,使用管道输出到less中

可以使用echo指令输出shell变量,例如输出BASH_VERSION变量的值:echo $BASH_VERSION。

设置环境变量

为了更好的展示Shell变量和环境变量的区别,我们从Shell变量开始,然后转移到环境变量: 创建一个名字为MY_VAR值为linuxize的Shell变量仅需要输入:

MY_VAR='linuxize'

可以通过使用echo $MY_VAR指令,或者使用grep指令(set | grep MY_VAR)来显示变量的值;

echo $MY_VAR #output linuxize

使用printenv MY_VAR检测这个变量是不是环境变量,理所当然,输出为空,这个变量不是环境变量。 也可以打印子Shell中的变量来观察bash -c 'echo $MY_VAR',当然输出也是空值,因此这个变量不是环境变量。

export指令常用来设置环境变量。创建环境变量可以简单地export Shell变量来实现,例如:

export MY_VAR printenv MY_VAR #output linuxize

当然也可以通过创建子shell来确认是否创建了环境变量,会得到同样的输出。

可以简单的通过一行来定义环境变量:

export MY_NEW_VAR="My New Var"

以这种方式创建的环境变量仅在当前会话中可用。如果你打开一个新的shell或登出,所有变量将丢失。

永久环境变量

要使环境变量持久,需要在bash配置文件中定义这些变量。在大多数Linux发行版中,当你启动一个新的会话时,环境变量将从以下文件中读取:

/etc/environment 使用此文件设置系统范围的环境变量。此文件中的变量按以下格式设置:FOO=bar VAR_TEST="Test Var" /etc/profile 每当输入bash登录shell时,就会加载该文件中设置的变量。在此文件中声明环境变量时,需要使用export命令:export JAVA_HOME="/path/to/java/home" export PATH=$PATH:$JAVA_HOME/bin ~/.bashrc 每个用户shell特定的配置文件。例如,如果您正在使用Bash,则可以在~/.bashrc中声明变量。export PATH="$HOME/bin:$PATH"

为了加载新的环境变量到当前shell会话中,可以使用source命令:

source ~/.bashrc C中用来显示和设置环境变量的函数 打印所有环境变量

关于C中的main函数,C标准有如下描述:

The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters: int main(void) { /* … */ } or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char argv[]) { / … */ } or equivalent;10) or in some other implementation-defined manner.

但是大部分编译器都支持main函数接受第三个参数,第三个参数存储所有的环境变量。

#include // Most of the C compilers support a third parameter to main which // store all envorinment variables int main(int argc, char *argv[], char * envp[]) { int i; for (i = 0; envp[i] != NULL; i++) printf("\n%s", envp[i]); getchar(); return 0; }

如果你想用一个更标准的方式,则可以通过 extern char **environ;来实现,关于environ的更多信息可以通过man environ来获得。

#include #include extern char **environ; int main() { int i = 1; char *s = *environ; for (; s; i++) { printf("%s\n", s); s = *(environ+i); } return 0; } 打印或者设置单个环境变量

获取单个环境变量getenv:

char *getenv(const char *name); //name 也就是环境变量的名称,返回环境变量的值得指针,获取不到返回为空

设置单个环境变量setenv:

//name 是环境变量的名字,value是环境变量的值,override环境变量存在且有值是否更新其值 int setenv(const char *name, const char *value, int overwrite);

两个函数包含在stdlib.h中。

参考文章 How to Set and List Environment Variables in LinuxC Program to print environment variablesPrinting all environment variables in C / C++


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有