У циклі над масивом додайте елемент до масиву


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

тому що для циклу я повинен перевірити, чи є якийсь файл, який копіюється цим циклом, якийсь вміст ..
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.