Не получается перебрать массив в Bash

Пытаюсь перебрать массив, результат должен быть таким(в столбик):

24 
45 
98 
34 
22 
55

Вот мой код, не пойму почему не работает, выдает ошибку в строке for, не пойму что тут не так. Насколько я понимаю интерпретатору что то не нравиться.

#!/bin/bash

mass=(24 45 98 34 22 55)

for((i=0;i<${mass[@]};i++)); do

echo "$i"

done

Вот сама ошибка:

Error(s), warning(s):

392036285/source.sh: line 4: ((: 0 < 24 45 98 34 22 55: syntax error in expression (error token is "45 98 34 22 55")

Подскажите в чем дело?

P.S. Также хочу сложить сначала первую половину цифр, а потом вторую и сравнить их.


Ответы (3 шт):

Автор решения: user7860670

Для получения длины массива перед его именем надо добавить #

for((i=0;i<${#mass[@]};i++)); do

Кроме того, вместо echo "$i" надо выводить соотв. элемент массива: echo "${mass[i]}"

Однако еще проще будет использовать for ... in

#!/bin/bash

mass=(24 45 98 34 22 55)

for i in ${mass[@]}
do
    echo "${i}"
done
→ Ссылка
Автор решения: DiD

Еще перебрать массив можно таким способом:

mass=(24 45 98 34 22 55)

xargs -n1 echo <<<${mass[*]}

xargs очень интересная команда, она преобразует текст из входящего потока в параметры для запуска команд и программ. Очень мощный инструмент. xargs в одну строчку организует очередь выполнения большого количества однотипных задач в заданное количество процессов(потоков). Подробно по команде man xargs.

Индексы можно вывести так:

seq ${#mass[@]}

Команда seq работает как счётчик, содержит от одного до трех параметров:

seq считать_от считать_до шаг_счета
seq считать_от считать_до
seq считать_до  

Можно другой подход:

tr ' ' '\n' <<<${mass[@]}

tr заменяет символы одни на другие

Если mass был бы строкой, то можно было бы сделать так:

mass="24 45 98 34 22 55"
echo -e ${mass// /\\n}
→ Ссылка
Автор решения: Karaban

Получилось перебрать с помощью этого кода:

#!/bin/bash

mass=(24 45 98 34 22 55)

for i in ${mass[@]}
do
    echo "${i}"
done
→ Ссылка