Eu diria que o gato é uma ferramenta inadequada aqui e é por isso que você está recebendo esse comportamento indesejado, o gato é projetado para concatenar um conjunto de arquivos e gravar a saída em outro arquivo, é uma peculiaridade da implementação a entrada padrão é stdin e a saída padrão é stdout.
Eu diria que um comando bem mais adequado seria:
#!/bin/bash
cp ${1} /dev/stdout
O diretório dev stdout é originalmente somente Linux, mas antes que eu seja gritado por usar uma construção específica da plataforma bash (o shell explicitamente declarado que eles estão usando) implementa / dev / stdout como um builtin, portanto, é utilizável em qualquer plataforma com bash ou ksh.
cp é um utilitário mais adequado aqui, pois é projetado para copiar o conteúdo de um arquivo para outro e é exatamente o que estamos fazendo aqui, copiando $ 1 para stdout
Este comando também falhará se não houver entrada e funcionar em qualquer sistema com o bash, observe que o usuário escapou corretamente de qualquer nome de arquivo com caracteres estranhos como espaço ou \ n.