При добавлении к тому же массиву в различных циклах только последние значения остаются Bash 4

Простой ответ: Вы не можете. echo (будьте этим, окружают встроенный или регулярный двоичный файл), не обрабатывает его стандартный вход - это - один путь только.

7
08.11.2013, 23:35
1 ответ

Взятый от Bash FAQ:

Я установил переменные в цикле, это находится в конвейере. Почему они исчезают после того, как цикл завершается?

Причина этого потенциально удивительного поведения, как описано выше, состоит в том, что каждый SubShell представляет новый переменный контекст и среду. Цикл с условием продолжения выше выполняется в новой подоболочке с ее собственной копией переменной linecount созданный с начальным значением '0' взятых от родительской оболочки. Эта копия затем используется для подсчета. То, когда цикл с условием продолжения закончен, копия подоболочки отбрасывается, и исходная переменная linecount родителя (чье значение не изменилось), используется в команде эха.

Для предотвращения подоболочки от того, чтобы быть созданным во втором цикле можно подать данные к нему способами кроме через канал:

while read snack; do
    FILES+=($snack)
done < <(find /var/candy -name "chocolate_[0-9]")

.

while read snack; do
    FILES+=($snack)
done <<<"$(find /var/candy -name "chocolate_[0-9]")"
13
27.01.2020, 20:16
  • 1
    Что относительно того, если у меня есть функция, любят, добавляют () {ФАЙЛЫ += 1$;} и затем для каждого цикла делают поскольку я во (что); действительно добавьте $i; сделанный нижний регистр –  Gregg Leventhal 08.11.2013, 21:03
  • 2
    Пример в Вашем комментарии выше работ. Помните, что проблема, с которой Вы встретились, присутствует только во втором цикле, который содержит канал. Я обновлю свой ответ. –  Teresa e Junior 08.11.2013, 22:35

Теги

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