原文地址: http://blog.chinaunix.net/u/21908/showart.php?id=1420565 參考資料
* 《學習bash shell 第3 版》6.4. Arrays
Bash 中還可以使用陣列變數 , 其賦值有兩種 :
(1) name = (value1 ... valuen) 此時下標從 0 開始,也可以: names=([2]=alice [0]=hatter [1]=duchess) 。
(2) name[index] = value
數組可以使用 declare –a 來顯示聲明, 數組下標的範圍沒有任何限制 , 同時也不必使用連續的分量。可以通過 ${ array [i ]}. 訪問數組中的元素。如果不指定元素,則表示第一個元素。 @ 與 * 相同,但是使用時加引號,並在引號中返回每個參數, * 則作為一個整體的字串返回。
# A=(a b c def)
# echo ${A[@]}
a b c def
# echo ${A}
a
echo ${A[*]}
a b c def
for i in "${A[@]}"; do
echo $i
done
顯示的結果:
a
b
c
def
for i in "${A[*]}"; do
echo $i
done
顯示結果:
a b c def
顯示目前有值的數組序號:―― bash 3.0 以後才支援。
# echo ${!A[@]}
0 1 2 3
// 取得數組元素的個數
# echo ${#A[@]}
4
顯示第 3 個元素裡面的元素的個數:
echo ${#A[3]}
3
echo ${#A[2]}
1
// 清除變數
$ unset A
$ echo ${A[@]}
$
A=B
B=C
unset $A 事實上所取消的變數是 B 而不是 A
// 清空變數 , 即將值變為空白
$ A=
$ echo ${A[@]}
$
#!/bin/bash
for i in $(cut -f 1,3 -d: /etc/passwd) ; do
echo $i
array[${i#*:}]=${i%:*}
done
echo "User ID $1 is ${array[$1]}."
echo "There are currently ${#array[@]} user accounts on the system."
用 shell 實現的選擇排序
# vi test2
#!/bin/bash
values=(39 5 36 12 9 3 2 30 4 18 22 1 28 25)
numvalues=${#values[@]}
for (( i=0; i < numvalues; i++ )); do
lowest=$i
for (( j=i+1; j < numvalues; j++ )); do
if [ ${values[j]} -le ${values[$lowest]} ]; then
lowest=$j
fi
done
temp=${values[i]}
values[i]=${values[lowest]}
values[lowest]=$temp
done
for (( i=0; i < numvalues; i++ )); do
echo -ne "${values[$i]}/t"
done
echo -e "/n/n-------end---------/n"
環境變數 DIRSTACK 就是使用數組實現的。其他還有BASH_VERSINFO , PIPESTATUS
字串轉數組
str="12 34 56"
arr=($str)
count=${#arr[@]}
for (( i=0;i<count;i=i+1))
do
echo "$i=arr[$i]"
done