如何制作多维数组Bash

如何制作多维数组Bash,bash,Bash,所以我一直在网上寻找如何制作二维阵列。就像我有点了解单线阵列一样。但是当我在网上看的时候,我看到的只是一堆代码,我甚至不知道代码的每个部分都做了什么。谢谢你的回答 你能给我解释一下代码的重要部分吗?还有函数。多维数组只是bash 4中关联数组的特例: # Make myarray an associative array declare -A myarray # Assign some random value myarray[3,7]="foo" # Access it through

所以我一直在网上寻找如何制作二维阵列。就像我有点了解单线阵列一样。但是当我在网上看的时候,我看到的只是一堆代码,我甚至不知道代码的每个部分都做了什么。谢谢你的回答


你能给我解释一下代码的重要部分吗?还有函数。

多维数组只是bash 4中关联数组的特例:

# Make myarray an associative array
declare -A myarray 

# Assign some random value
myarray[3,7]="foo"

# Access it through variables
x=3 y=7
echo "${myarray[$x,$y]}"

它之所以有效,是因为“3,7”和其他任何字符串一样只是一个字符串。它也可以是“野猪”或“三通”。只要代码中的其他内容将索引3和7转换为字符串“3,7”,它就可以像多维数组一样工作。

多维数组只是bash 4中关联数组的特例:

# Make myarray an associative array
declare -A myarray 

# Assign some random value
myarray[3,7]="foo"

# Access it through variables
x=3 y=7
echo "${myarray[$x,$y]}"

它之所以有效,是因为“3,7”和其他任何字符串一样只是一个字符串。它也可以是“野猪”或“三通”。只要代码中的其他内容将索引3和7转换为字符串“3,7”,它就会像多维数组一样工作。

如果您想在不事先知道元素编号的情况下列出元素,一个非常方便的解决方案:

a=()
a+=( Mexico,2000 )
a+=( Canada,3000 )

for row in ${a[@]};
do
    echo place: ${row%%,*} airplanes: ${row##*,}
done

如果您想在不事先知道元素编号的情况下列出元素,那么有一个非常方便的解决方案:

a=()
a+=( Mexico,2000 )
a+=( Canada,3000 )

for row in ${a[@]};
do
    echo place: ${row%%,*} airplanes: ${row##*,}
done

你看过这篇帖子吗:@paddy上面说的都是使用python。另外,bash现在可以用Bash4.0制作多维图像了。你看过这篇帖子吗:@paddy这篇文章说的都是使用python。此外,bash现在可以使用bash 4.0进行多维显示。尽管@other guy,这不是仍然是线性的吗?那么这个“foo”的输出是什么呢?那么它是如何变成2d的呢?你能给我一个小的有输出的例子吗。很抱歉,我不理解另一个人,这是一种实现多维数组的好方法。如果您真正要寻找的是一个数组数组,其中类似于
${x[2]}
的内容是另一个数组,那么
bash
就不是适合您的语言。这是可能的,但很快就会变得难看,因为您必须通过间接参数扩展和/或
eval
@life来伪造它。这是一个完整的示例,它输出
foo
。它是2D的,因为您使用两个整数变量对它进行索引,就像任何其他语言中的2D数组一样。它不是线性的,因为没有bash数组是线性的,它们总是稀疏的。尽管@other guy,这不是仍然是线性的吗?那么这个“foo”的输出是什么呢?那么它是如何变成2d的呢?你能给我一个小的有输出的例子吗。很抱歉,我不理解另一个人,这是一种实现多维数组的好方法。如果您真正要寻找的是一个数组数组,其中类似于
${x[2]}
的内容是另一个数组,那么
bash
就不是适合您的语言。这是可能的,但很快就会变得难看,因为您必须通过间接参数扩展和/或
eval
@life来伪造它。这是一个完整的示例,它输出
foo
。它是2D的,因为您使用两个整数变量对它进行索引,就像任何其他语言中的2D数组一样。它不是线性的,因为没有bash数组是线性的,它们总是稀疏的。