zoukankan      html  css  js  c++  java
  • Linux环境变量

    Linux环境变量

    全局环境变量与局部环境变量

      Linux环境变量能帮助我们提升Linux shell得体验。很多程序和脚本都通过环境变量来获取系统信息、存储临时数据和配置信息。在Linux系统上有很多地方可以设置环境变量,了解去哪里设置相应得环境变量很重要!

    什么是环境变量

      bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息(这也是被称作环境变量的原因)。这项特性允许在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们,这也是储存持久数据的一种简便方法。

      在bash shell中,环境变量分为两类:

    •   全局变量
    •   局部变量

      全局环境变量

      全局环境变量对于shell会话和所有生成的子shell都是可见的。局部变量则只对创建它们的shell可见。这让全局环境变量对那些所创建的子shell需要获取父shell信息的程序来说非常有用。Linux系统在开始bash会话时就设置了一些全局环境变量。系统环境变量基本上都是使用全大写字母,以区别于普通用户的环境变量。要查看全局变量,可以使用env或printenv命令。

      由于信息过多,只截取部分

     1 xiaoyu@Admin:~$ printenv
     2 XDG_VTNR=7
     3 LC_PAPER=zh_CN.UTF-8
     4 LC_ADDRESS=zh_CN.UTF-8
     5 XDG_SESSION_ID=c2
     6 XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/xiaoyu
     7 LC_MONETARY=zh_CN.UTF-8
     8 CLUTTER_IM_MODULE=xim
     9 SESSION=ubuntu
    10 GPG_AGENT_INFO=/home/xiaoyu/.gnupg/S.gpg-agent:0:1
    11 TERM=xterm-256color
    12 VTE_VERSION=4205
    13 XDG_MENU_PREFIX=gnome-
    14 SHELL=/bin/bash
    15 QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
    16 WINDOWID=56623114
    17 LC_NUMERIC=zh_CN.UTF-8
     1 xiaoyu@Admin:~$ env
     2 XDG_VTNR=7
     3 LC_PAPER=zh_CN.UTF-8
     4 LC_ADDRESS=zh_CN.UTF-8
     5 XDG_SESSION_ID=c2
     6 XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/xiaoyu
     7 LC_MONETARY=zh_CN.UTF-8
     8 CLUTTER_IM_MODULE=xim
     9 SESSION=ubuntu
    10 GPG_AGENT_INFO=/home/xiaoyu/.gnupg/S.gpg-agent:0:1
    11 TERM=xterm-256color
    12 VTE_VERSION=4205
    13 XDG_MENU_PREFIX=gnome-
    14 SHELL=/bin/bash
    15 QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
    16 WINDOWID=56623114
    17 LC_NUMERIC=zh_CN.UTF-8

      要显示个别环境变量的值,可以使用printenv命令,但是不要用env命令。

    1 xiaoyu@Admin:~$ printenv HOME
    2 /home/xiaoyu
    3 xiaoyu@Admin:~$ 
    4 xiaoyu@Admin:~$ env HOME
    5 env: ‘HOME’: No such file or directory
    6 xiaoyu@Admin:~$ 

      也可以使用echo显示变量的值。在这种情况下引用某个环境变量的时候,必须在变量前面加上一个美元符($)。

    1 xiaoyu@Admin:~$ echo $HOME
    2 /home/xiaoyu
    3 xiaoyu@Admin:~$ 

      在echo命令中,在变量名前加上$可不仅仅是要显示变量当前的值。它能够让变量作为命令行参数

    1 xiaoyu@Admin:~$ ls $HOME
    2 Desktop    Downloads         Music      Pictures  Templates  video.tar
    3 Documents  examples.desktop  music.tar  Public    Videos
    4 xiaoyu@Admin:~$ 
    1 xiaoyu@Admin:~$ ls /home/xiaoyu/
    2 Desktop    Downloads         Music      Pictures  Templates  video.tar
    3 Documents  examples.desktop  music.tar  Public    Videos
    4 xiaoyu@Admin:~$ 

      全局变量可用于进程的所有子shell

     1 xiaoyu@Admin:~$ bash
     2 xiaoyu@Admin:~$ ps -f
     3 UID         PID   PPID  C STIME TTY          TIME CMD
     4 xiaoyu     3072   3065  0 10:44 pts/2    00:00:00 bash
     5 xiaoyu     4112   3072  0 11:24 pts/2    00:00:00 bash
     6 xiaoyu     4122   4112  0 11:24 pts/2    00:00:00 ps -f
     7 xiaoyu@Admin:~$ echo $HOME
     8 /home/xiaoyu
     9 xiaoyu@Admin:~$ exit
    10 exit
    11 xiaoyu@Admin:~$ 

      此例中,用bash命令生成一个子shell后,显示了HOME环境变量的当前值,这个值和父shell中的一摸一样,都是/home/xiaoyu。

      局部环境变量

      顾名思义,局部环境变量只能在定义它们的进程中可见。尽管它们是局部的,但是和全局环境变量一样重要。事实上,Linux系统也默认定义了标准的局部环境变量。不过你也可以定义自己的局部变量,如你所想,这些变量被称为用户定义局部变量。
      查看局部环境变量的列表有点复杂。遗憾的是,在Linux系统并没有一个只显示局部环境变量的命令。set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。
     1 xiaoyu@Admin:~$ set
     2 BASH=/bin/bash
     3 BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
     4 BASH_ALIASES=()
     5 BASH_ARGC=()
     6 BASH_ARGV=()
     7 BASH_CMDS=()
     8 BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
     9 BASH_LINENO=()
    10 BASH_REMATCH=()
    11 BASH_SOURCE=()
    12 BASH_VERSINFO=([0]="4" [1]="3" [2]="48" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
    13 BASH_VERSION='4.3.48(1)-release'
    14 CLUTTER_IM_MODULE=xim
    15 COLUMNS=97

      可以看到,所有通过printenv命令能看到的全局环境变量都出现在了set命令的输出中。但在set命令的输出中还有其他一些环境变量,即局部环境变量和用户定义变量。

      说明 命令env、printenv和set之间的差异很细微。set命令会显示出全局变量、局部变量以及用户定义变量。它还会按照字母顺序对结果进行排序。env和printenv命令同set命令的区别在于前两个命令不会对变量排序,也不会输出局部变量和用户定义变量。在这种情况下,env和printenv的输出是重复的。不过env命令有一个printenv没有的功能,这使得它要更有用一些。

    设置用户定义变量

       可以在bash shell中直接设置自己的变量。下面将会介绍一些怎样在交互式shell或shell脚本程序中创建自己的变量并引用它们。

      设置局部用户定义变量

  • 相关阅读:
    Linux Shell系列教程之(十七) Shell文件包含
    Linux Shell系列教程之(十六) Shell输入输出重定向
    Linux Shell系列教程之(十五) Shell函数简介
    Linux Shell系列教程之(十四) Shell Select教程
    Linux Shell系列教程之(十三)Shell分支语句case … esac教程
    Linux Shell系列教程之(十二)Shell until循环
    Linux Shell系列教程
    算法系列:链表
    C++ 系列:Boost Thread 编程指南
    C++:多线程002
  • 原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/12142736.html
Copyright © 2011-2022 走看看