帶值和不帶值的 Bash 腳本數組

帶值和不帶值的 Bash 腳本數組

我有幾個變數 a 、 b 和 c 。

在 for 迴圈中,我想顯示它們的所有值。

for i in ${!a[@]}; do
  echo "${a[$i]} ${b[$i]} ${c[$i]}"
done

現在,由於變數 c 中的其他值故意為空,因此值已移至頂部。

mammals land elephant
reptile water pigeon
birds air

如何建立一個空變數以使值不會改變?

我嘗試這樣做,如果字串與“water”匹配,那麼它將僅回顯 a 和 b。

for i in ${!a[@]}; do
  if [ "$c" = "water"]; then
  echo "${a[$i]} ${b[$i]}"
  else
  echo "${a[$i]} ${b[$i]} ${c[$i]}"
  fi
done

答案1

您在尋找這樣的東西嗎?

a=("" b c)
b=(d "" f)
c=(g h "")

for i in ${!a[@]}; do
  printf "%s\t" "${a[$i]}" "${b[$i]}" "${c[$i]}"
  echo          
done

輸出是

$ bash arr.sh 
        d       g
b               h
c       f

我使用空字串來標記對角線上的“缺失”值。在複合賦值中,不可能跳過索引,那裡必須有一些東西。當然,您可以使用a[1]=b a[2]=c並保留a[0]未指派的狀態,或明確地使用 和 保留未指派狀態unset a[0]

我你需要一個合適的二維數組,你可能想使用合適的程式語言而不是shell...某種解決方法可能是使用帶有像 之類的鍵的關聯數組2-3,兩個索引由某個字串分隔。但這取決於你實際上在做什麼。

(在你的後一個程式碼片段中,你使用的是$c沒有索引的(與 相同${c[0]},然後使用 上的索引EMPTY,即使你只為其分配了一個值。)

相關內容