数字多维数组(AKA 2D数组或二维数组) - Bash

时间:2017-01-19 13:50:53

标签: php arrays bash multidimensional-array

编辑1:关于Multi-dimensional arrays in Bash,据我所知,所有的答案和例子都是关联数组,而不是数字多维数组,如下图所示。他们只使用一个值命名索引,而不是具有多个值的数字索引。

编辑2:根据this answer,也许我可能无法在Bash中做我想做的事情,因为我无法做到这样的事情:echo $A[1][1]来获取第二个索引的第二个值数组,就像我们通常可以在PHP和其他人一样。

编辑3:根据this other question,我几乎可以肯定,这不能用Bash中的“人类可读”字体来完成。方式。

在PHP中,这就是如何创建数字多维数组:

<?php
$b[]=array("Apple's Mac","UNIX from Ken, Dennis, Douglas and Peter");
$b[]=array("Sun Microsystems' Solaris","Linus Torvalds' Linux");

//or:

$b=array(
    array("Apple's Mac","UNIX from Ken, Dennis, Douglas and Peter"),
    array("Sun Microsystems' Solaris","Linus Torvalds' Linux")
);

print_r($b);

/*Array
(
    [0] => Array
        (
            [0] => Apple's Mac
            [1] => UNIX from Ken, Dennis, Douglas and Peter
        )    
    [1] => Array
        (
            [0] => Sun Microsystems' Solaris
            [1] => Linus Torvalds' Linux
        )    
)*/

//To access the first numeric array:

print_r($b[0]);

?>

我怎样才能在Bash中做到这一点?这是我到目前为止所尝试的:

A=(
"Apple's Mac" "UNIX from Ken, Dennis, Douglas and Peter"
"Sun Microsystems' Solaris" "Linus Torvalds' Linux"
)

#Trying to print the second array inside array ${A[@]}...
echo ${A[1]}
#It prints:
UNIX from Ken, Dennis, Douglas and Peter

#The same if I do:

X=("Apple's Mac" "UNIX from Ken, Dennis, Douglas and Peter")
Y=("Sun Microsystems' Solaris" "Linus Torvalds' Linux")
A=(
"${X[@]}"
"${Y[@]}"
)
echo ${A[1]}
#It prints:
UNIX from Ken, Dennis, Douglas and Peter

唯一的&#34; hackish&#34;我能找到想要的方式:

A=(
"Apple's Mac|UNIX from Ken, Dennis, Douglas and Peter"
"Sun Microsystems' Solaris|Linus Torvalds' Linux"
)

#Printing the second index of the array
echo ${A[1]}
#It prints:
Sun Microsystems' Solaris|Linus Torvalds' Linux

#Accessing the second "value" of the second index
echo ${A[1]} | cut -d'|' -f2
#It prints:
Linus Torvalds' Linux

但必须有一种更容易,更正确,更正确的做法......

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

不是最好的,但这是另一种解决方案:

您可以使用声明,如下所示

#!/bin/bash

A1=("Apple's Mac" "UNIX from Ken, Dennis, Douglas and Peter")
A2=("Sun Microsystems' Solaris" "Linus Torvalds' Linux")

declare -p A1 A2 > multi-array.save

如果你需要加载不同的数组:

source ./multi-array.save

当然,那个不是多维的,但为了记忆,它会得到类似的东西。