История изменений
Исправление vodz, (текущая версия) :
«Запись for f in ${!array[@]} статична, при удалении [элементов] будет лишние циклы» — vodz.
Именно. Если перезаписывать в array только нужные элементы, то выходной цикл мы можем сделать по счётчику полученных элементов, а ${!array[@]} же даст в том числе незатёртые.
«Разреженные массивы ... придуманы не для баловства, а для специальных задач. Данный топик их не требует» — снова vodz.
Именно. Разреженные массивы тут не требуются. Это вы их сюда подогнали. Вот с себя и спрашивайте.
arr=(a b c d)
for ((j = i = 0, n=${#arr[@]}; i < n; i++)); do
if [[ "${arr[i]#[bc]}" == "${arr[i]}" ]]; then
arr[j++]=${arr[i]}
else
unset arr[$i]
fi
done
#
for ((i = j; i < n; i++)); do
unset arr[$i]
done
# OR:
#for ((i = j; i < j; i++)); do
# USE arr[$i]
#done
Результат - последовательно заполненый массив с нужными элементами. В коментариях — альтернатива, удобно и практично.
Ну да, надо признаться, до подкручивания предела цикла for в теле цикла, я бы не додумался. Лол.
Никак нет. *Равные* 'b' или 'с'.
Ну да, а я и не знал. Лол.
Ну а что поделаешь, если зачем-то надо считывать все в память, а не обрабатывать построчно?
Причём тут считывать, если речь конкретно о конструкции for var in ${arr[ * ]}?
Исходная версия vodz, :
«Запись for f in ${!array[@]} статична, при удалении [элементов] будет лишние циклы» — vodz.
Именно. Если перезаписывать в array только нужные элементы, то выходной цикл мы можем сделать по счётчику полученных элементов, а ${!array[@]} же даст в том числе незатёртые.
«Разреженные массивы ... придуманы не для баловства, а для специальных задач. Данный топик их не требует» — снова vodz.
Именно. Разреженные массивы тут не требуются. Это вы их сюда подогнали. Вот с себя и спрашивайте.
arr=(a b c d)
for ((j = i = 0, n=${#arr[@]}; i < n; i++)); do
if [[ "${arr[i]#[bc]}" == "${arr[i]}" ]]; then
arr[j++]=${arr[i]}
else
unset arr[$i]
fi
done
for ((i = j; i < n; i++)); do
unset arr[$i]
done
Результат - последовательно заполненый массив с нужными элементами.
Ну да, надо признаться, до подкручивания предела цикла for в теле цикла, я бы не додумался. Лол.
Никак нет. *Равные* 'b' или 'с'.
Ну да, а я и не знал. Лол.
Ну а что поделаешь, если зачем-то надо считывать все в память, а не обрабатывать построчно?
Причём тут считывать, если речь конкретно о конструкции for var in ${arr[ * ]}?