Числовой многомерный массив (AKA 2D-массив или двумерный массив) — Bash

РЕДАКТИРОВАТЬ 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

Но ДОЛЖЕН быть более простой, правильный и правильный способ сделать то же самое …

Спасибо за любую помощь.

1

Решение

Не самое лучшее, но вот другое решение:

Вы можете использовать объявить как следующее

#!/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

Конечно это не многомерный, но ради памяти он получает нечто подобное.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector