echo
Uma echo
implementaçã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 \c
os 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 echo
em fazê-lo.
Um bash
shell normalmente não está em conformidade com a especificação e lida com as -n
outras opções, mas mesmo isso é incerto. Você pode fazer:
shopt -s xpg_echo
echo hey\\nthere
hey
there
E nem isso é necessário se bash
tiver sido construído com a opção de tempo de compilação ...
--enable-xpg-echo-default
Faça o echo
built-in expandir caracteres de escape com barra invertida por padrão, sem exigir a -e
opção. Isso define o valor padrão da xpg_echo
opção shell para on
, o que faz com que o Bash echo
se 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 echo
reconhecem.
printf
Por outro lado, printf
o comportamento é bastante manso em comparação.
JUSTIFICATIVA
O printf
utilitário foi adicionado para fornecer funcionalidades historicamente fornecidas por echo
. No entanto, devido a diferenças irreconciliáveis nas várias versões echo
existentes, a versão possui poucos recursos especiais, deixando-os para este novo printf
utilitá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 %b
strings yte ou strings literais %s
. Além dos %f
ormats no primeiro argumento, ele se comporta mais como um %b
argumento de string yte, exceto pelo fato de não lidar com a \c
fuga.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Consulte Por que é printf
melhor 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 \n
no 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
echo
obrigatório? você pode usarprintf
.