РЕДАКТИРОВАТЬ 1: о Многомерные массивы в Bash, насколько я понимаю, все ответы и примеры касаются ассоциативных массивов, а не числовых многомерных массивов, как в случае ниже. Они имеют именованные индексы с одним значением, а не числовые индексы с более чем одним значением.
РЕДАКТИРОВАТЬ 2: Согласно этот ответ, возможно, это может быть невозможно сделать то, что я хочу в Bash, потому что я не мог сделать что-то вроде: echo $A[1][1]
чтобы получить второе значение второго индекса в массиве, как мы обычно можем в PHP и других.
РЕДАКТИРОВАТЬ 3: Согласно этот другой вопрос, Я почти уверен, что это не может быть сделано в 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
Единственный «хакерский» способ, которым я мог найти, чтобы получить, я хочу:
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
Но ДОЛЖЕН быть более простой, правильный и правильный способ сделать то же самое …
Спасибо за любую помощь.
Не самое лучшее, но вот другое решение:
Вы можете использовать объявить как следующее
#!/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
Конечно это не многомерный, но ради памяти он получает нечто подобное.
Других решений пока нет …