Я пишу сценарий оболочки, который содержит многопоточный цикл while. Мой цикл перебирает значения массива. В цикле я вызываю функцию. В конце функции я сохраняю результаты в виде строковой переменной. Я хочу добавить эту строковую переменную в массив на каждой итерации, а затем иметь возможность извлекать содержимое этого массива после завершения цикла while.
Насколько я понимаю, многопоточный цикл while заставляет массив быть пустым после завершения цикла while. Каждый поток выполняется в своей собственной среде, и значение массива не выходит за пределы этой среды. Я хотел бы иметь возможность расширить это значение массива за пределы потока, если это возможно. В настоящее время я просто записываю строковое значение во временный файл, а затем после цикла while, считываю содержимое временного файла и сохраняю его в виде массива. Этот метод работает, так как файл обычно не слишком большой, но я бы хотел избежать записи в файл, если это возможно
Мой код - doDeepLookup на самом деле является вызовом API, но для аргументации позволяетпросто скажите, что он добавляет текст перед строкой чтения из цикла while
#!/bin/bash
n=0
maxjobs=20
resultsArray=""
while IFS= read -r line
do
IPaddress="$(echo $line | sed 's/ /\n/g' | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}")"
doDeepLookup "$line" "$IPaddress" &
if(( $(($((++n)) % $maxjobs)) == 0 )) ; then
wait
fi
done <<< "$(printf '%s\n' "${SomeOtherArray[@]}")"
printf '%s\n' "${resultsArray[@]}" #Returns NULL
doDeepLookup() {
results="$(echo "help me : $line")"
resultsArray+=($results)
}