编辑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
但必须有一种更容易,更正确,更正确的做法......
感谢您的帮助。
答案 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
当然,那个不是多维的,但为了记忆,它会得到类似的东西。