Shell基礎 變數

2021-10-06 23:03:25 字數 4156 閱讀 5894

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...