В цикле над массивом добавьте элемент в массив


9

У меня есть проблема с для цикла в Bash. Например: у меня есть массив ("etc" "bin" "var"). И я перебираю этот массив. Но в цикле я хотел бы добавить некоторое значение в массив. Например

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

Это отображает etc bin var(конечно, на отдельных строках). И если я добавлю после doэтого:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

Я хочу: etc bin var sbin(конечно на отдельных строках).

Это не работает. Как мне это сделать?


1
Изменение вещи, которую вы повторяете, всегда рискованно. Часто самое время сделать шаг назад и подумать, есть ли другой подход, который может иметь смысл
Эрик Ренуф,

Ответы:


6

Это будет добавить «SBIN» 3 раза , как это должно, но это не будет итерация по вновь добавленной «SBIN» S в том же цикле.

После 2-го примера:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

Да, верно, но мне нужно добавить в тот же цикл :)
damekr

forТогда используйте две петли. Сначала выполните ваши добавления, затем зациклите результат.
PSkocik

1
Я не понимаю, почему вы хотите добавить sbin в цикл. Добавление только одного раза имеет больше смысла:array+=(sbin); for i in ...
PSkocik

потому что в цикле for я должен проверить, есть ли какой-то файл, который копируется этим циклом for, имеет какой-то контент ..
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

Это будет перебирать ваш список, привязывать sbinк концу указанного списка условно и включать sbinв повторяемый контент.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.