Не получается перебрать массив в 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 шт):
Для получения длины массива перед его именем надо добавить #
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
Еще перебрать массив можно таким способом:
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}
Получилось перебрать с помощью этого кода:
#!/bin/bash
mass=(24 45 98 34 22 55)
for i in ${mass[@]}
do
echo "${i}"
done