В отличие от ksh, что позволяет многомерные массивы, bash (4.2 или ниже) не допускает многомерные массивы. Я работаю над этим, имея разделитель в элементах, а затем каждый элемент первого массива может быть сделан в самом массиве. Foe пример:Обходное решение для ограничения размера мономерного размера bash
GPIO=("in:down:0:22:1-1.4:17:usb:usb port 3 mgmt button"
"in:down:0:13:1-1.5:18:usb:usb port 4 mgmt button")
затем получить доступ к третьему элементу первой строки я сделать что-то вроде этого:
eval $(echo "ROW0=($(echo "${GPIO[0]}" | awk -F: '{ for(i=1;i<=NF;i++) printf("\"%s\" ",$i);}'))")
echo ${ROW0[2]}
мне не нравится это делать, но я не нашел более аккуратный путь вокруг проблемы. Есть ли более аккуратный и эффективный способ решения проблемы, все еще приближаясь к нему, как массив?
Существует также обходной путь с использованием ассоциативных массивов и добавлением поддельного второго индекса в индексе элемента:
declare -A FAKE2DIMARRAY
FAKE2DIMARRAY=(
[0,0]="first row first element"
[0,1]="first row second element"
[1,0]="second row first element"
[1,1]="second row second element"
)
Хотя это решение очень аккуратно и эффективно это делает определение массива беспорядка, если он имеет много строк и элементов. Например, мой полный массив GPIO на самом деле равен 16x8, и для этого потребуется 128 строк и заботиться о том, чтобы правильно индексировать каждую строку ... в этом случае это тоже не оптимально.
увидеть, если http://stackoverflow.com/questions/11233825/multi-dimensional-arrays-in-bash и http://stackoverflow.com/questions/16487258/how-to-declare-2d -array-in-bash help ... и это опечатка в вашем названии? 'mono' вместо' multi' – Sundeep
Прочтите название как «обходное решение для ограничения размера мономерного размера bash» Обе ссылки используют фальшивую многомерную ... вторая имеет интересный подход, хотя ... но ограничивает что вы помещаете в строки. – louigi600
Необходимые вложенные структуры данных - очень хороший признак того, что вам нужно начать использовать другой язык. – chepner