2022年11月18日 星期五

Linux Shell Script 將以空格間隔的字串轉成 Array 型別變數的方法

在 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:

  1. array[@] 等同 array[*],代表 array 的所有值。
  2. #array[@] 代表取 array 的長度。

沒有留言 :

張貼留言