@angelok_adclan_2017

Как организовать динамическое использование for?

Необходимо пройти по всем элементам массива с шагом 2, но количество элементов заранее не известно.
примерно так:
#!/bin/bash
arr=([1]=1 [2]=2 3 [5]=4 5);
for i in {0..${#arr[*]}..2};do
 printf "[$i]:${arr[$i]}\n";
done

Но при обработке выкидывает:
arr.sh: строка 4: {0..5..2}: ошибка синтаксиса: ожидается операнд (ошибочная метка "{0..5..2}")
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
#!/bin/bash
arr=([1]=1 [2]=2 3 [5]=4 5);
eval 'for i in {0..'${#arr[*]}'..2};do
 printf "[$i]:${arr[$i]}\n";
done'

Такой brace expansion работает только с литералами. Приведённое решение генерирует тело цикла с литералами и засовывает его в eval.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы