2014-08-31 3 views
0

Я хочу спросить о синтаксисе, который я использую для присвоения переменной двухмерного элемента массива. это в основном то, что я пытаюсь сделать: У меня есть 2 двумерный массив символов и строка с именем sub_string, который получает значение определенного элемента массива и поместить его в другой строке под названием whole_stringНазначение значения массива скрипту переменной bash

for ((j=1;j<=num_columns;j++)) do 
     for ((i=1;i<=num_rows;i++)) do 

Присвоение значения элемента [I, J] в матрице массива к югу строки

whole_string="$whole_String$sub_string" 
    done 
done 

Я хочу знать, как присвоить значение массива в строку к югу я есть. спасибо

+1

'bash' не имеет двумерные массивы, не может хранить массив внутри другого массива. – chepner

+0

... ну, можно избежать массива - как в 'printf -v arr_str '% q'" $ {arr [@]} "' - и сохранить полученную строку как элемент массива ... но все же вопрос далеко, слишком расплывчатый и непонятный, чтобы понять, действительно ли это будет способствовать достижению разумной цели. –

+0

Одномерный ассоциативный массив с ключами типа '$ {x} _ $ y' иногда достаточно хорош, чтобы имитировать двумерный массив ... но опять же вопрос слишком неясен. –

ответ

3

С текущим bash вы можете отделить ассоциативный массив для создания многомерных массивов.

#!/bin/bash 

declare -A A # declare associative array A 
num_rows=7 
num_columns=9 

# fill array 
for ((j=1;j<=num_rows;j++)) do 
    for ((i=1;i<=num_columns;i++)) do 
    A[$j,$i]="$j:$i" # fill with row:column 
    done 
done 

# print array 
for ((j=1;j<=num_rows;j++)) do 
    for ((i=1;i<=num_columns;i++)) do 
    echo -n "${A[$j,$i]} " 
    done 
    echo 
done 

Output (9x7 массив):

 
1:1 1:2 1:3 1:4 1:5 1:6 1:7 1:8 1:9 
2:1 2:2 2:3 2:4 2:5 2:6 2:7 2:8 2:9 
3:1 3:2 3:3 3:4 3:5 3:6 3:7 3:8 3:9 
4:1 4:2 4:3 4:4 4:5 4:6 4:7 4:8 4:9 
5:1 5:2 5:3 5:4 5:5 5:6 5:7 5:8 5:9 
6:1 6:2 6:3 6:4 6:5 6:6 6:7 6:8 6:9 
7:1 7:2 7:3 7:4 7:5 7:6 7:7 7:8 7:9 
Смежные вопросы