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變量中此變量仍然存在。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM