Необычное поведение переменной в циклах while while

Может кто-нибудь объяснить мне, что здесь происходит?

Автор сценария:

  • Почему `` IFS = read` используется так часто, а не `IFS =; в то время как читать..`?
  • Почему я не могу изменить оболочку командой chsh?
  • Можно ли использовать split для создания кусков символов из китайских байтов юникода?
  • Удалите несколько возможных суффиксов
  • Список файлов, отсортированных по количеству строк, которые они содержат
  • Список файлов в каталоге с определенным расширением
  • #!/bin/sh SKIP="unity-launcher|unity-panel|unity-dash|Hud|XdndCollectionWindowImp|Desktop" WINS=() wmctrl -l | grep -Ev " (${SKIP})" | cut -d \ -f 1 | while read window; do WINS=( ${WINS[@]} $window ) echo "Found window: $window; New size: ${#WINS[@]}" done echo "Total window count: ${#WINS[@]}" echo "Window IDs:" for i in "${WINS[@]}"; do echo " $i" done 

    Вывод:

     Found window: 0x0380000a; New size: 1 Found window: 0x038002ae; New size: 2 Found window: 0x03800a33; New size: 3 Found window: 0x03000001; New size: 4 Found window: 0x04c00004; New size: 5 Total window count: 0 Window IDs: 

    Ожидаемое:

     Found window: 0x0380000a; New size: 1 Found window: 0x038002ae; New size: 2 Found window: 0x03800a33; New size: 3 Found window: 0x03000001; New size: 4 Found window: 0x04c00004; New size: 5 Total window count: 5 Window IDs: 0x0380000a 0x038002ae 0x03800a33 0x03000001 0x04c00004 

    По сути, в конце цикла while массив WINS как-то сбрасывается, и я понятия не имею, почему. Есть ли какая-то странная фигура в bash, о которой я не знаю?

    Linux и Unix - лучшая ОС в мире.