mkfifo /tmp/content/$i
curl -s "${urls[$i]}" > /tmp/content/$i &
Bash делает, что-то невероятное - вместо N параллельных запросов, каждый из которых выполнится за 1-2 сек (а значит вся закачка+сборка займет пару секунд), он делает запросы последовательно
Ну учи матчасть, что ли. Ты заставил curl выводить результаты в FIFO вместо того, чтобы выводить их в файлы, а у FIFO совсем маленький буфер, после заполнения которого запись в FIFO блокируется, пока из него не начнётся чтение.
Если уж хотелось параллельности, можно было сделать так:
rm -rf /tmp/content
mkdir /tmp/content
for i in ${!urls[@]}; do
curl -s "${urls[$i]}" > /tmp/content/$i &
done
wait
rm -f /tmp/output
for i in ${!urls[@]}; do
cat /tmp/content/$i >> /tmp/output
done