2015-07-07 2 views
3

Если у меня естьКак получить размер второго измерения двумерных массивов в bash?

arr[0,0]=0; 
arr[0,1]=1; 

И я стараюсь

echo ${#arr[0,@]} 

Я получил

bash: 0,@: syntax error: operand expected (error token is "@") 

Что такое правильный способ получить размер второго измерения или arr?

+1

не строковых ключей; индекс оценивается в арифметическом контексте, в котором поддерживается оператор запятой. – chepner

+0

Учитывая эту ошибку, это арифметический контекст. Без этого это может быть ассоциативный массив, в этом случае anubhava будет правильным. –

ответ

3

Многомерные массивы не поддерживаются в BASH.
Тем не менее, вы можете имитировать их, используя различные techniques.

Следующие определения являются одинаковыми:

  • arr[1,10]=anything
  • arr["1,10"]=anything

Оба оценивали с arr[10]=anything(благодаря chepner):

echo ${arr[10]} 
anything 
+0

Тогда почему это законно, чтобы определить 'arr [0,0] = 0'? – OneZero

+5

Поскольку '0,0' является законным арифметическим выражением, которое вычисляется равным 0. (Оператор запятой возвращает значение второго выражения.) – chepner

+1

@OneZero И для ассоциативных массивов это означает строковый ключ' "0,0" '. –

0

Bash не имеет многомерного массива. То, что вы пытаетесь сделать, даже не будет имитировать многомерный массив, если вы не объявили переменную arr как ассоциативный массив. Проверьте следующее испытание:

#!/bin/bash 
arr[0,0]=0 
arr[0,1]=1 
arr[1,0]=2 
arr[1,1]=3 
echo "${arr[0,0]} ${arr[0,1]}" # will print 2 3 not 0 1 
unset arr 
declare -A arr 
arr[0,0]=0 
arr[0,1]=1 
arr[1,0]=2 
arr[1,1]=3 
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1 

И вы можете получить только размер в целом с ${arr[@]}

Смежные вопросы