for numeric (次數 for-loop)
#!/bin/bash
# numeric
for i in {1..10}
do
echo $i
done
for arr (arr for-loop)
#!/bin/bash
# array elements
arr=("test1" "test2" "test3")
for elements in ${arr[@]}; do
echo $elements
done
或是
#!/bin/bash
# array elements
arr=("test1" "test2" "test3")
for elements in ${arr[*]}; do
echo $elements
done
備註:「@」, 「*」的差別
基本上這兩個大同小異,只差在有沒有被 Quote 「””」才會出現差別。
範例
#!/bin/bash
# 定義一個包含空格的元素陣列
arr=("apple banana" "cat dog" "egg fox")
# 使用未引用的 $arr[*] 和 $arr[@], 展開結果相同
echo "Unquoted *: $arr[*]"
echo "Unquoted @: $arr[@]"
# 使用引用的 "${arr[*]}" 和 "${arr[@]}", 展開結果相同
echo "Quoted *: ${arr[*]}"
echo "Quoted @: ${arr[@]}"
# 使用引用的 "${arr[*]}" 和 "${arr[@]}" 在迴圈中, 結果不同
echo "Loop with quoted *:"
for i in "${arr[*]}"; do
echo "$i"
done
echo "Loop with quoted @:"
for i in "${arr[@]}"; do
echo "$i"
done
結果
這邊我們可以注意換行的方式,如果使用了 「${arr[*]}」搭配 Quote ,
那會變成一串字 (被組成了單一個結果),因此如果使用 for 會跑不出我們要的結果。
我自己的記法
為了怕混淆,我就記要使用 for loop 時,沒事不要 Quote,
另外使用「@」,可以避免沒有展開的結果 (但這些其實有搞清楚就沒事了XD)