Sim, mas sua saída pode ficar confusa. É melhor que a função grave sua saída em um arquivo específico, dependendo do nome do host, e deixe o script principal concatenar o resultado (e limpar).
Além disso, você deve citar duas vezes suas variáveis. Copie e cole o script em ShellCheck .
Talvez algo assim:
#!/bin/bash
hosts=( host1 host2 host3 )
outfile="nvidia_smi.txt"
rm -f "$outfile"
function process_host {
local host="$1"
local hostout="$host.out"
printf "Processing host '%s'\n" "$host"
echo "$host" >"$hostout"
ssh "${host}" nvidia-smi >>"$hostout"
}
for host in "${hosts[@]}"; do
process_host "${host}" &
done
wait
for host in "${hosts[@]}"; do
hostout="$host.out"
cat "$hostout"
rm -f "$hostout"
done >"$outfile"
cat "$outfile"
O último loop pode ser substituído por
cat "${hosts[@]/%/.out}" >"$outfile"
rm -f "${hosts[@]/%/.out}"