082-【Bash百寶箱】shell內建命令之declare、typeset、local

一、declare(typeset)

在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

二、local

在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
相關文章
相關標籤/搜索