xplicaciones necesarias para el comportamiento del comando exec integrado de bash de Linux

DesdeBash Manual de referencia Me sale lo siguiente sobreexecomando @ bash incorporado:

Si se proporciona el comando, reemplaza el shell sin crear un nuevo proceso.

Ahora tengo el siguientebash script:

#!/bin/bash
exec ls;
echo 123;
exit 0

Esto se ejecutó, obtuve esto:

cleanup.sh  ex1.bash  file.bash  file.bash~  output.log
(files from the current directory)

Ahora, si tengo este script:

#!/bin/bash
exec ls | cat
echo 123
exit 0

Obtengo el siguiente resultado:

cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123

Mi pregunta es

Si cuandoexec se invocait reemplaza el shell sin crear un nuevo proceso, ¿por qué cuando pones| cat, elecho 123 está impreso, pero sin él, no lo está. Por lo tanto, sería feliz si alguien puede explicar cuál es la lógica de este comportamiento.

Gracias

EDIT: después de la respuesta de @torek, obtengo un comportamiento aún más difícil de explicar:

1.exec ls>outl comando @ crea elout archivo y poner en él ellsesultado del comando de @;

2.exec ls>out1 ls>out2 crea solo los archivos, pero no incluye ningún resultado. Si el comando funciona como se sugiere, creo que el comando número 2 debería tener el mismo resultado que el comando número 1 (aún más, creo que no debería haber creado elout2 archivo)

Respuestas a la pregunta(2)

Su respuesta a la pregunta