• linux中set、unset、export、env、declare,readonly的区别以及用法


      
      set命令显示当前shell的变量,包括当前用户的变量;
     
      env命令显示当前用户的变量;
     
      export命令显示当前导出成用户变量的shell变量。
     
            每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,
     
      但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
     

    0.declare 命令

      declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
     
    语法:
    declare(选项)(参数)

     选项:

    +/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
    -f:仅显示函数;
    r:将变量设置为只读;
    x:指定的变量会成为环境变量,可供shell以外的程序来使用;
    i:[设置值]可以是数值,字符串或运算式。

    参数:

    shell变量:声明shell变量,格式为“变量名=值”。
     
    主要作用就是声明shell变量:  declare var=value,与之等价的功能是 var=value   ,另外还有一个与之等价的功能 typeset var=value
    例如:三种声明shell变量的方式
    [root@VM_0_12_centos ~]# var1=var1value
    [root@VM_0_12_centos ~]# declare var2=var2value
    [root@VM_0_12_centos ~]# typeset var3=var3value
    [root@VM_0_12_centos ~]# echo $var1
    var1value
    [root@VM_0_12_centos ~]# echo $var2
    var2value
    [root@VM_0_12_centos ~]# echo $var3
    var3value
    declare -x将shell变量输出到环境变量
    [root@VM_0_12_centos ~]# declare -x var1=value1
    [root@VM_0_12_centos ~]# env | grep var1
    var1=value1
     

    1.unset命令

      unset命令用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。
    语法:
    unset(选项)(参数)

     选项:

    -f:仅删除函数;
    -v:仅删除变量。
    参数:
    shell变量或函数:指定要删除的shell变量或shell函数。

    例如:删除上面的var1,var2,var3,其中var1已经输出为环境变量,var2和var3为普通shell变量。

    [root@VM_0_12_centos ~]# echo $var1
    value1
    [root@VM_0_12_centos ~]# echo $var2
    var2value
    [root@VM_0_12_centos ~]# echo $var3
    var3value
    [root@VM_0_12_centos ~]# env | grep var1  #证明var1为环境变量
    var1=value1
    [root@VM_0_12_centos ~]# env | grep var2
    [root@VM_0_12_centos ~]# env | grep var3
    [root@VM_0_12_centos ~]# unset var1
    [root@VM_0_12_centos ~]# unset var2
    [root@VM_0_12_centos ~]# unset var3
    [root@VM_0_12_centos ~]# env | grep var2
    [root@VM_0_12_centos ~]# env | grep var1
    [root@VM_0_12_centos ~]# echo $var3

    添加一个环境变量并设置为只读删除不了环境变量

    [root@VM_0_12_centos ~]# declare -x var6=value6  #声明一个变量并输出到环境变量
    [root@VM_0_12_centos ~]# env | grep var6
    var6=value6
    [root@VM_0_12_centos ~]# readonly var6  #设置为只读
    [root@VM_0_12_centos ~]# unset var6
    -bash: unset: var6: cannot unset: readonly variable
     

    2.Set命令

      set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。

    语法:

    set(选项)(参数)

    选项:

    -a:标示已修改的变量,以供输出至环境变量。
    -b:使被中止的后台程序立刻回报执行状态。
    -C:转向所产生的文件无法覆盖已存在的文件。
    -d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
    -e:若指令传回值不等于0,则立即退出shell。
    -f:取消使用通配符。
    -h:自动记录函数的所在位置。
    -H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。
    -k:指令所给的参数都会被视为此指令的环境变量。
    -l:记录for循环的变量名称。
    -m:使用监视模式。
    -n:只读取指令,而不实际执行。
    -p:启动优先顺序模式。
    -P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
    -t:执行完随后的指令,即退出shell。
    -u:当执行时使用到未定义过的变量,则显示错误信息。
    -v:显示shell所读取的输入值。
    -x:执行指令后,会先显示该指令及所下的参数。

    参数;

    取消某个set曾启动的参数。

    实例:设置两个环境变量并设置为环境变量

    [root@VM_0_12_centos ~]# unset var1  #删除shell变量
    [root@VM_0_12_centos ~]# unset var2
    [root@VM_0_12_centos ~]# unset var3
    [root@VM_0_12_centos ~]# var1=value1  #定义shell变量的三种方式
    [root@VM_0_12_centos ~]# declare var2=value2
    [root@VM_0_12_centos ~]# typeset var3=value3
    [root@VM_0_12_centos ~]# set -a var2  #将三个变量输出为环境变量
    [root@VM_0_12_centos ~]# set -a var3
    [root@VM_0_12_centos ~]# set -a var1
    [root@VM_0_12_centos ~]# env | grep var  #查看环境变量
    var1=value1
    var3=value3
    var2=value2

     3.env命令

      env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。

      如果使用env命令在新环境中执行指令时,会因为没有定义环境变量"PATH"而提示错误信息"such file or directory"。此时,用户可以重新定义一个新的"PATH"或者使用绝对路径。

     语法:

    env(选项)(参数)

    选项;

    -i:开始一个新的空的环境;
    -u<变量名>:从当前环境中删除指定的变量。

    参数:

    • 变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
    • 指定:指定要执行的指令和参数。

     例如:

    查看环境变量

    [root@VM_0_12_centos ~]# env | grep var
    var1=value1
    var3=value3
    var2=value2
    MAIL=/var/spool/mail/root

    4.export命令

    export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。

      一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

     语法:

    export(选项)(参数)

    选项:

    -f:代表[变量名称]中为函数名称;
    -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
    -p:列出所有的shell赋予程序的环境变量。

    参数:

      变量:指定要输出或者删除的环境变量。

    例如:

    [root@VM_0_12_centos ~]# export var1=value1  #定义一个环境变量
    [root@VM_0_12_centos ~]# env|grep var  
    var1=value1
    MAIL=/var/spool/mail/root
    [root@VM_0_12_centos ~]# export var1=value11111  #修改上面的环境变量
    [root@VM_0_12_centos ~]# env|grep var
    var1=value11111
    MAIL=/var/spool/mail/root
    [root@VM_0_12_centos ~]# export -n var1  #删除上面的环境变量,只是从环境变量中删除,shell变量仍然存在
    [root@VM_0_12_centos ~]# env|grep var
    MAIL=/var/spool/mail/root
    [root@VM_0_12_centos ~]# 

    6.readonly命令

      readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。

    语法:

    readonly(选项)(参数)

    选项:

    -f:定义只读函数;
    -a:定义只读数组变量;
    -p:显示系统中全部只读变量列表。

    参数:

    变量定义:定义变量,格式为“变量名=‘变量值’”。

    例如:查看系统的只读变量:

    [root@VM_0_12_centos ~]# readonly -p
    declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
    declare -ir BASHPID
    declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d"
    declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
    declare -ir EUID="0"
    declare -ir PPID="11854"
    declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
    declare -ir UID="0"

    总结:

      1.declare var=value   可以声明一个shell变量(与之等价的是 var=value,typeset var=value),也可以直接用declare -x var=value 声明一个变量并直接输出到环境变量,也可以加上-r参数表示只读变量。

      2.unset var 可以删除变量,包括shell变量和环境变量(当前用户变量),不能够删除具有只读属性的shell变量和环境变量。

      3.set -a var  可以将var变量输出到环境变量

      4.env可以查看所有的环境变量,可以加管道命令与grep命令过滤变量

         5.export var=value用于定义一个环境变量,修改环境变量也是这个,等价于 declare -x var=name

       export -n var 用于从环境变量删除此变量,但是shell变量中此变量仍然存在。

  • 相关阅读:
    C#集合类型——Array、ArrayList、List 之浅谈
    C#反射(二)
    ASP.Net内置对象之网页之间传参(二)
    ASP.Net内置对象之网页之间传参(一)
    MyEclipse中设置智能提示
    常用Java片段
    ue中替换行
    正确的计算耗时
    JAVA之GUI编程ACTION事件
    JAVA之GUI编程窗体事件
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/9075766.html
Copyright © 2020-2023  润新知