【Bash 基本語法 #4】bash for loop 實作範例程式碼 (備註:「@」, 「*」的差別)

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)

Reference

  • Bash for