带值和不带值的 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,即使你只为其分配了一个值。)

相关内容