在shell中,內建(builtin)命令declare與typeset用法相同,格式以下:shell
declare [-aAfFgilnrtux] [-p] [name[=value] ...] typeset [-aAfFgilnrtux] [-p] [name[=value] ...]
declare命令用於聲明變量,能夠給變量設置屬性。若是沒有指定name,則顯示相應變量的值。下面介紹declare命令各選項的含義。數組
「-p」:顯示每一個name的屬性和值,不指定name時,則顯示相應的全部變量的屬性和值。
「-f」:用於函數,顯示函數定義。
「-F」:用於函數,只顯示函數名字,不顯示函數定義。
「-a」:用於索引(下標)數組。
「-A」:用於關聯(鍵值對)數組。
「-i」:用於整數,能夠進行數學運算。
「-n」:用於引用變量,這個變量name的值其實是變量value的值,value做爲一個變量來使用。不能用於數組。
「-l」:對變量賦值時,值的大寫字母所有轉換爲小寫。
「-u」:對變量賦值時,值的小寫字母所有轉換爲大寫。
「-r」:聲明變量只讀,不能被修改,也不能unset。
「-g」:在函數中declare命令效果同內置命令local,變量的影響範圍是局部的,除非使用了「-g」。
「-x」:等效於內置命令export。
「-t」:給每一個name設置trace屬性,對函數來講,能夠繼承調用shell的trap命令的DEBUG和RETURN屬性,對變量則沒什麼意義。
對於上面的選項,能夠使用加號「+」代替減號「-」,效果是關閉對應的屬性,可是,「+a」和「+r」無效。bash
下面是declare命令在數學運算中的例子:函數
$ a=1 $ b=2 $ echo $a+$b 1+2 $ declare -i a=1 $ declare -i b=2 $ declare -i c $ c=$a+$b $ echo $c 3
在shell中,內建(builtin)命令local,格式以下:ui
local [option] [name[=value] ...]
local命令只能用shell函數,聲明變量name爲局部變量,只對當前函數或其子進程有效,選項option能夠是內建命令declare能夠接受的選項。spa
不在shell函數中使用local命令會出錯:code
$ local bash: local: can only be used in a function
在shell函數中使用local命令:繼承
$ cat test.sh #!/bin/bash foo=global echo $foo bar() { echo $foo local foo=local echo $foo } bar echo $foo $ bash test.sh global global local global
在shell函數中不使用local命令:索引
$ cat test.sh #!/bin/bash foo=global echo $foo bar() { echo $foo foo=local echo $foo } bar echo $foo $ bash test.sh global global local local