在 Linux Shell 中,用空格做間隔的文字並不是一個 Array 變數,
例如:
"a b c"
雖然可以用 for in 來遍歷印出,例如:
string="a b c";
for element in string;
do
echo ${element};
done
會印出:
a
b
c
但如果是下面想用 index 來得到 Array 值的方式的程式:
string="a b c";
for ((i=0; i < ${#string[@]}; i++));
do
echo ${i};
echo ${string[${i}]};
done
則會得到輸出:
0
a b c
而不是預期的:
0
a
1
b
2
c
如果要用 index 來得到 Array 值的話,必須先把字串轉成 Array,
使用小括弧即可做到,像這樣 array=(a b c),例如:
string="a b c";
string_array=(${string})
所以正確的寫法應如下:
string="a b c";
string_array=(${string});
for ((i=0; i < ${#string_array[@]}; i++));
do
echo ${i};
echo ${string_array[${i}]};
done
上例會印出:
0
a
1
b
2
c
Note:
- array[@] 等同 array[*],代表 array 的所有值。
- #array[@] 代表取 array 的長度。
沒有留言 :
張貼留言