array1=() # 空數組:零個元素
array2=("") # 含一個空字符串元素的數組
| 特性 | array1=() | array2=("") |
|---|---|---|
元素個數 ${#array[@]} | 0 | 1 |
第一個元素 ${array[0]} | 未設置/報錯 | 空字符串 "" |
遍歷 for i in "${array[@]}" | 零次循環 | 執行一次,i 為空串 |
| 內存佔用 | 極小(僅數組結構) | 分配 1 個元素槽位 |
#!/bin/bash
array1=()
array2=("")
echo "array1 長度: ${#array1[@]}" # 0
echo "array2 長度: ${#array2[@]}" # 1
echo "array1[0]: '${array1[0]}'" # 空(未設置)
echo "array2[0]: '${array2[0]}'" # 空字符串
echo "遍歷 array1:"
for i in "${array1[@]}"; do echo " [$i]"; done # 無輸出
echo "遍歷 array2:"
for i in "${array2[@]}"; do echo " [$i]"; done # 輸出一行 []
array1=() 如 空盒子,裡面什麼都沒有。array2=("") 如 盒子裡放了一張白紙,白紙內容為空,但佔據位置。int *p = NULL (空指針/空數組) vs char str[1] = {""} (含一個空字符串,實際佔 1 字節存 \0)。files=(); files+=(newfile) 動態添加。arr[5]=val 直接賦值)。unset arr[0] 刪除元素後數組變稀疏,${#arr[@]} 減 1,但下標不重排。declare -p arr 或 export(僅支持關聯數組導出)。理解「零元素」與「一個空元素」的本質區別,避免 Shell 腳本中遍歷次數、條件判斷邏輯出錯。