『Bash Shell』如何宣告變數 Variable 程式範例/完整說明

歡迎分享:
  •  
  •  
  •  
  •  
  •  
  •  

 

變數 Variable 用來儲存值 Value,變數的型態有四種

1. 整數 (Integer)

2. 索引式陣列 (Indexed Array)

3. 關聯式陣列 (Associative Array)

4. 字串 (String)

變數的型態以變數本身帶有的屬性來表示,屬性如下

1. 屬性 i: 有此屬性的變數是整數 (Integer)

2. 屬性 a: 有此屬性的變數是索引式陣列 (Indexed Array)

3. 屬性 A: 有此屬性的變數是關聯式陣列 (Associative Array)

4. 屬性 r: 有此屬性的變數表示變數值是唯讀 (Read-only)

注意:沒有 iaA 三種屬性的就算是字串型態

變數屬性要怎麼查詢可以參考如下文章

Bash Shell | 如何使用內建指令 declare Command

1. 宣告一個整數型態的變數時,使用 declare -i 後面加上變數名稱,語法如下

declare -i name[=value]

範例:

#!/bin/sh

declare -i var0=10

declare -i var1
var1=20

# The value of var2 will be zero if the value is not a number
declare -i var2=A

declare -p var0 var1 var2

結果:

declare -i var0="10"
declare -i var1="20"
declare -i var2="0"

說明:

因為 var2 宣告為整數型態,當 var2 的變數值被指定為非數字時,var2 的變數值變成0(此範例是指定為字元’A’),宣告為整數型態的好處是,做算術運算時不需要使用算數擴展 $(( expression ))。

範例:

#!/bin/sh

var0=10
var1=${var0}+1
echo $var1

declare -i var2=10 var3
var3=${var2}+1
echo $var3

declare -p var0 var1 var2 var3

var1=$(( var0 + 1 ))
echo $var1

declare -p var1

結果:

$var1 = 10+1
$var3 = 11
declare -- var0="10"
declare -- var1="10+1"
declare -i var2="10"
declare -i var3="11"
$var1 = 11
declare -- var1="11"

說明:

1. var0 與 var1 宣告為字串,因此 var1=${var0}+1 被當作字串連接處理,var1 的結果為字串 10+1。

2. var2 與 var3 宣告為整數,因此 var3=${var2}+1 被當做整數加法處理,var3 的結果為整數 11。

 

2. 宣告一個索引式陣列的變數時,主要有兩種方式,語法如下

第一種

name[subscript]=value

第二種

declare -a name[=(value1 value2 …)]

範例:

#!/bin/sh

array1[0]=a
array1[1]=b
array1[2]=c

declare -a array2=(d e f)

declare -p array1 array2

for i in {0..2}
do
    echo \$array1[$i] = ${array1[$i]}
done

for i in {0..2}
do
    echo \$array2[$i] = ${array2[$i]}
done

結果:

declare -a array1='([0]="a" [1]="b" [2]="c")'
declare -a array2='([0]="d" [1]="e" [2]="f")'

$array1[0] = a
$array1[1] = b
$array1[2] = c
$array2[0] = d
$array2[1] = e
$array2[2] = f

 

3. 宣告一個關聯式陣列的變數時,使用 declare -A 後面加上變數名稱,語法如下

declare -A name[=([key1]=value1 [key2]=value2 …)]

範例:

#!/bin/sh

declare -A score_array=([william]=100 [neo]=80 [tom]=90)

declare -p score_array

echo \$score_array[william] = ${score_array[william]}
echo \$score_array[neo] = ${score_array[neo]}
echo \$score_array[tom] = ${score_array[tom]}

結果:

declare -A score_array='([tom]="90" [neo]="80" [william]="100" )'
$score_array[william] = 100
$score_array[neo] = 80
$score_array[tom] = 90

 

4. 宣告一個字串變數時,主要有兩種方式,語法如下

第一種

str1=[value]

第二種

declare str2[=value]

範例:

#!/bin/sh

str1="I am str1"

declare str2="I am str2"

declare str3
str3="I am str3"

declare -p str1 str2 str3

echo \$str1 = $str1
echo \$str2 = $str2
echo \$str3 = $str3

結果:

declare -- str1="I am str1"
declare -- str2="I am str2"
declare -- str3="I am str3"

$str1 = I am str1
$str2 = I am str2
$str3 = I am str3

 

5. 宣告唯讀屬性的變數,使用 declare -r 語法如下

declare -r name

範例:

#!/bin/sh

declare -ri var0=10
declare -ra array1=(a b c)
declare -rA score_array=([william]=100 [neo]=80 [tom]=90)
declare -r str1="I am str1"

var0=11

array1[0]=A

score_array[neo]=60

str1="read-only"

結果:(對個別參數做設定時的錯誤訊息如下)

./declare_ro.sh: line 8: var0: readonly variable
./declare_ro.sh: line 9: array1: readonly variable
./declare_ro.sh: line 10: score_array: readonly variable
./declare_ro.sh: line 11: str1: readonly variable


好站連結

 1. http://linux.vbird.org/linux_basic/0320bash.php#variable

發表迴響