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)
注意:沒有 i, a, A 三種屬性的就算是字串型態
變數屬性要怎麼查詢可以參考如下文章
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。
第一種
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
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 後面加上變數名稱,語法如下
範例:
#!/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
第一種
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
好站連結
1. http://linux.vbird.org/linux_basic/0320bash.php#variable
沒有留言:
張貼留言