while read a; do echo "FIFO1: $a"; done < /tmp/fifo1 & exec 7> /tmp/fifo1
é de fato equivalente a
while read a; do echo "FIFO1: $a"; done < /tmp/fifo1 &
exec 7> /tmp/fifo1
& age como um separador de comando, além de colocar o comando precedendo-o em segundo plano.
Estritamente falando, ele age como um separador para itens em uma lista de comandos :
A
listis a sequence of one or more pipelines separated by one of the operators ‘;’, ‘&’, ‘&&’, or ‘||’, and optionally terminated by one of ‘;’, ‘&’, or anewline.