echo
Uma implementação echo
que esteja em conformidade com a Especificação Unix Única adicionará novas linhas se você:
echo 'line1\nline2'
Mas isso não é um comportamento confiável. Na verdade, não existe qualquer comportamento padrão que você possa esperar de echo
.
string
A string to be written to standard output. If the first operand is
-n
, or if any of the operands contain a <\
backslash> character, the results are implementation-defined.On XSI-conformant systems, if the first operand is
-n
, it shall be treated as a string, not an option. The following character sequences shall be recognized on XSI-conformant systems within any of the arguments:
\a
- Write an <alert>.
\b
- Write a <backspace>.
\c
- Suppress the <newline> that otherwise follows the final argument in the output. All characters following the\c
in the arguments shall be ignored.
\f
- Write a <form-feed>.
\n
- Write a <newline>.
\r
- Write a <carriage-return>.
\t
- Write a <tab>.
\v
- Write a <vertical-tab>.
\
- Write a <backslash> character.num - Write an 8-bit value that is the zero, one, two, or three-digit octal numberMake the
echo
builtin expand backslash-escaped characters by default, without requiring the-e
option. This sets the default value of thexpg_echo
shell option toon
, which makes the Bashecho
behave more like the version specified in the Single Unix Specification, version 3. See Bash Builtins, for a description of the escape sequences thatecho
recognizes.num
.
E realmente não há uma maneira geral de saber como escrever uma nova linha com echo
, exceto que você geralmente pode confiar em fazer echo
para fazer isso.
Um shell bash
normalmente não não está em conformidade com a especificação e lida com -n
e outras opções, mas mesmo isso é incerto. Você pode fazer:
shopt -s xpg_echo
echo hey\nthere
hey
there
E nem mesmo que é necessário se bash
foi criado com a opção de tempo de criação ...
The
printf
utility was added to provide functionality that has historically been provided byecho
. However, due to irreconcilable differences in the various versions ofecho
extant, the version has few special features, leaving those to this newprintf
utility, which is based on one in the Ninth Edition system.The EXTENDED DESCRIPTION section almost exactly matches the
printf()
function in the ISO C standard, although it is described in terms of the file format notation in XBD File Format Notation.
printf
Por outro lado, o comportamento de printf
é bastante manso em comparação.
Ele lida com strings de formato que descrevem seus argumentos - o que pode ser qualquer coisa, mas para strings são ou %b
yte strings ou literal %s
trings. Diferentemente de %f
oumats no primeiro argumento, ele se comporta mais como um argumento de string %b
yte, exceto que ele não manipula o escape \c
.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Veja Por que printf
melhor que echo
? para mais.
echo() printf
Você pode escrever seus próprios padrões em conformidade com echo
como ...
echo(){
printf '%b ' "$@\n\c"
}
... o que deve sempre fazer a coisa certa automaticamente.
Na verdade, não ... Isso imprime um literal \n
na cauda 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