Você pode redirecionar tudo o que quiser, echo
mas não fará nada com isso. echo
nã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 echo
implementações com algumas seqüências de escape nelas expandidas e / ou argumentos iniciados com -
possivelmente tratados como opções).
Se você deseja echo
exibir 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 cat
comando, e echo
acrescenta 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. yash
também removerá bytes que não fazem parte de caracteres válidos.
Se a razão para querer fazer isso é porque você quer echo
para expandir o \n
, \b
, \0351
... sequências de escape no arquivo (como conformant UNIX echo
implementações fazer, mas não todos ), então você preferir usar printf
vez :
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
, zsh
e bash
, pode-se também fazer:$(<file)
. Esse é um operador especial pelo qual o shell, em vez de cat
ler 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
?