Você pode redirecionar tudo o que quiser, echomas não fará nada com isso. echonão lê sua entrada padrão. Tudo o que faz é gravar na saída padrão seus argumentos separados por um caractere de espaço e finalizados por um caractere de nova linha (e com algumas echoimplementações com algumas seqüências de escape nelas expandidas e / ou argumentos iniciados com -possivelmente tratados como opções).
Se você deseja echoexibir o conteúdo de um arquivo, deve passar esse conteúdo como argumento echo. Algo como:
echo "$(cat my_file.txt)"
Note-se que $(...)retira o caractere de nova linha de fuga s da saída desse catcomando, e echoacrescenta uma volta.
Observe também que, exceto com zsh, você não pode passar caracteres NUL nos argumentos de um comando, portanto, acima, normalmente, não funcionará com arquivos binários. yashtambém removerá bytes que não fazem parte de caracteres válidos.
Se a razão para querer fazer isso é porque você quer echopara expandir o \n, \b, \0351... sequências de escape no arquivo (como conformant UNIX echoimplementações fazer, mas não todos ), então você preferir usar printfvez :
printf '%b\n' "$(cat my_file.txt)"
Ao contrário echo, esse é portátil e não terá problemas se o conteúdo do arquivo começar -.
Como uma alternativa para $(cat file), com ksh, zshe bash, pode-se também fazer:$(<file) . Esse é um operador especial pelo qual o shell, em vez de catler o conteúdo do arquivo, compõe a expansão. Ele ainda retira as novas linhas finais e engasga com bytes NUL, exceto em zsh. Em bash, isso ainda bifurca um processo extra. Observe também que uma diferença é que você não receberá nenhum erro se tentar ler um arquivo do tipo diretório dessa maneira. Além disso, embora $(< file)seja especial, $(< file; other command)não é (em zsh, quando não emula outro shell, que ainda expandiria o conteúdo do file, executando o comando implícito $READNULLCMD (normalmente um pager)).
echo?