echo
Uma echoimplementação que esteja em conformidade estrita com a Especificação Unix Única adicionará novas linhas se você:
echo 'line1\nline2'
Mas esse não é um comportamento confiável. Na verdade, não há realmente não é qualquer comportamento padrão que você pode esperar de echo.
OPERANDO
string
Uma sequência a ser gravada na saída padrão. Se o primeiro operando for -n, ou se algum dos operandos contiver um caractere < \barra invertida> , os resultados serão definidos pela implementação .
Nos sistemas em conformidade com XSI , se o primeiro operando for -n, ele deve ser tratado como uma sequência, não como uma opção . As seguintes seqüências de caracteres devem ser reconhecidas em sistemas compatíveis com XSI em qualquer um dos argumentos:
\a- Escreva um <alerta> .
\b- Escreva um <backspace> .
\c- Suprima o <newline> que segue o argumento final na saída. Todos os caracteres que seguem \cos argumentos devem ser ignorados.
\f- Escreva um <formfeed> .
\n- Escreva um <newline> .
\r- Escreva um <retorno de carro> .
\t- Escreva uma <tab> .
\v- Escreva uma <vertical-tab> .
\\- Escreva um caractere <barra invertida> .
\0num- Escreva um valor de 8 bits que seja o número octal de zero, um, dois ou três dígitos num.
E, portanto, realmente não existe uma maneira geral de saber como escrever uma nova linha echo, exceto que geralmente você pode confiar apenas echoem fazê-lo.
Um bashshell normalmente não está em conformidade com a especificação e lida com as -noutras opções, mas mesmo isso é incerto. Você pode fazer:
shopt -s xpg_echo
echo hey\\nthere
hey
there
E nem isso é necessário se bashtiver sido construído com a opção de tempo de compilação ...
--enable-xpg-echo-default
Faça o echobuilt-in expandir caracteres de escape com barra invertida por padrão, sem exigir a -eopção. Isso define o valor padrão da xpg_echoopção shell para on, o que faz com que o Bash echose comporte mais como a versão especificada na Especificação Unix Única, versão 3. Consulte Bash Builtins , para obter uma descrição das seqüências de escape que echoreconhecem.
printf
Por outro lado, printfo comportamento é bastante manso em comparação.
JUSTIFICATIVA
O printfutilitário foi adicionado para fornecer funcionalidades historicamente fornecidas por echo. No entanto, devido a diferenças irreconciliáveis nas várias versões echoexistentes, a versão possui poucos recursos especiais, deixando-os para este novo printfutilitário, baseado em um sistema da Nona Edição.
A seção DESCRIÇÃO ESTENDIDA corresponde quase exatamente à printf()função no padrão ISO C, embora seja descrita em termos da notação de formato de arquivo na Notação de formato de arquivo XBD .
Ele lida com strings de formato que descrevem seus argumentos - que podem ser inúmeras coisas, mas para strings são basicamente %bstrings yte ou strings literais %s. Além dos %formats no primeiro argumento, ele se comporta mais como um %bargumento de string yte, exceto pelo fato de não lidar com a \cfuga.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Consulte Por que é printfmelhor que echo? para mais.
echo() printf
Você pode escrever seus próprios padrões conforme echo...
echo(){
printf '%b ' "$@\n\c"
}
... o que deve sempre fazer a coisa certa automaticamente.
Na verdade, não ... Isso imprime um literal \nno final dos argumentos se o último argumento terminar em um número ímpar de <barras invertidas> .
Mas isso não acontece:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echoobrigatório? você pode usarprintf.