name=
[value]
declare name=
[value]
bash裡的變數不僅有值,還有屬性。declare命令可以給變數設定屬性。
$ declare -i abc=123 # 給變數abc賦予integer屬性
宣告變數時,如果沒有提供value,變數的值為null
變數宣告後,只能通過unset命令刪除
$ isvarset (
)$ isvarset
$ var=
$ isvarset
var =
$ declare -p var
declare -- var=
""$ unset var
$ declare var
$ isvarset
$ declare -p var
declare -- var
$ unset var
$ declare -p var
-bash: declare: var: not found
$ isvarvaluenull (
)$ var=
$ isvarvaluenull
the value of var is null
$ var=abc
$ isvarvaluenull
$ unset var
$ isvarvaluenull
the value of var is null
$ declare var
$ isvarvaluenull
the value of var is null
$ isvardeclared (
)$ unset var
$ isvardeclared
$ declare var
$ isvardeclared
var is declared
$ unset var
$ isvardeclared
$ var=
$ isvardeclared
var is declared
在name=value裡,bash會對value進行~擴充套件、引數和變數擴充套件、命令替換、算術擴充套件和引號刪除。如果變數有integer屬性,那麼變數的值會自動進行算術計算,不需要$((…)) 。
$ echo
$var
/home/felix
$ var=
$0$ echo
$var
-bash
$ var=
$(echo
'abc'
)$ echo
$var
abc$ var=
$((1+2
))$ echo
$var
3$ var=
"abc"
$ echo
$var
abc$ declare -i var
$ var=2*3
$ echo
$var
6
+=運算子
$ declare -i var=1
$ var+=2 # +=對具有integer屬性的變數是累計計算
$ echo
$var
3$ foo=123
$ foo+=4 # +=對字串變數的作用是追加字串
$ echo
$foo
1234
$ bar[0]
=abc
$ bar+=123
$ echo
$abc123
$ declare -p bar
declare -a bar=
([0]
="abc123"
)$ bar+=
(456)
$ declare -p bar
declare -a bar=
([0]
="abc123"
[1]=
"456"
)$ bar+=789
$ declare -p bar
declare -a bar=
([0]
="abc123789"
[1]=
"456"
)$ declare -a name=
([a]
=123)
$ name+=345
$ declare -p name
declare -a name=
([0]
="345"
[a]=
"123"
)$ name+=
([b]
=456)
$ declare -p name
declare -a name=
([0]
="345"
[b]=
"456"
[a]=
"123"
)
declare的-n選項給變數提供nameref屬性,使其成為對另乙個變數的引用。
在shell函式中,通常使用nameref來引用引數,等同於對函式引數命名。
$ var=123
$ func (
)$ func var
ref=123
$ echo
$var
456
在for in迴圈裡
for name [
[in [words …]];
]do commands;
done
如果name有nameref屬性,words可以是shell變數列表
$ declare -n ref
$ foo=123
$ bar=abc
$ for ref in foo bar;
doecho
"ref=$ref"
;done
ref=123
ref=abc
雖然nameref屬性不能用於陣列變數,但可以宣告引用陣列變數的變數,也可以宣告應用陣列元素的變數
$ foo=
(123 456)
$ declare -p foo
declare -a foo=
([0]
="123"
[1]=
"456"
)$ declare -n ref=foo
$ declare -p ref
declare -n ref=
"foo"
$ echo
$123 456
$ echo
$123 456
$ declare -n refelement=foo[0]
$ declare -p refelement
declare -n refelement=
"foo[0]"
$ echo
$refelement
123
想要刪除變數的nameref屬性,用unset -n。如果用unset對nameref變數,則銷毀被引用的變數,而nameref變數不會被銷毀。
$ foo=123
$ declare -n ref=foo
$ unset -n ref
$ declare -p ref
-bash: declare: ref: not found
$ declare -p foo
declare -- foo=
"123"
$ declare -n ref=foo
$ unset ref
$ declare -p foo
-bash: declare: foo: not found
$ declare -p ref
declare -n ref=
"foo"
$ foo=456
$ echo
$ref
456
Shell 基礎 shell 變數
變數中只能包含字母 數字 下劃線,不能以數字開頭 不能包含bash中的關鍵字 變數賦值時,變數和等號 之間不能有空格 yourname abc 注意變數和 之間不能有空格 使用變數時,需要在變數前加 使用 youname或 例子 新建檔案,檔案內容如下 yourname lisen 變數賦值 ech...
shell基礎 變數
變數的賦值 定義變數,注意等號兩邊沒有任何空格 variable 定義環境變數 export variable 雙引號 可含空格 可轉義特殊字元 variable 或 反引號 將命令結果賦值給變數 variable variable 將變數值賦值給變數 gg aa bb 變數的取值 取值 varia...
shell基礎 shell特殊變數
一.變數列表 二.實驗 系統 centos 7 1.特殊變數 root day2 cat p.sh bin bash echo 0 0 echo echo echo echo 1 2 3 1 2 3 root day2 sh p.sh a b c d 0 p.sh a b c d a b c d 4...