Estou tentando usar printf para formatar uma saída bonita em um script bash
por exemplo:
-----------------------
| This is some output |
-----------------------
Mas me deparei com um comportamento que não entendo.
$ printf "--"
me dá o erro printf: usage: printf [-v var] format [arguments]
e
$ printf "-stuff"
resulta em-bash: printf: -s: invalid option
Aparentemente, printf acha que estou tentando passar alguns argumentos enquanto não estou.
Enquanto isso, completamente por acidente, encontrei esta solução alternativa:
$ printf -- "--- this works now ----\n"
me dá--- this works now ----
Alguém pode explicar esse comportamento?
echo
que falhariam ao fazer issoecho ------------
? A maioria suporta apenas-n
(sem nova linha à direita),-e
(interpreta caracteres com escape de barra invertida) e possível-E
(NÃO os interpreta) e não comete erros quando outros argumentos do tipo opção são encontrados, certo? (EDIT: GNU's/bin/echo
também suporta--help
e--version
).Respostas:
O
--
é usado para informar ao programa que o que se segue não deve ser interpretado como uma opção de linha de comando paraprintf
.Edit: Assim, o que
printf "--"
você tentou basicamente acabou como "printf sem argumentos" e, portanto, falhou.fonte
--
você pode executarprintf -- --
.printf --
é o mesmo queprintf
(você recebe a mesma mensagem)printf -- $fmt
não é portátil. No busybox 1.30.1,printf -- '%s\n' hello
produz--
. Veja também: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
está sendo interpretado como uma opção (nesse caso, para indicar que não há mais opções).Uma string de formato sempre deve ser incluída ao ser usada
printf
para evitar más interpretações. Para o seu caso particular:fonte
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Existem diferenças entre o printf builtin e / usr / bin / printf, o segundo faz o que você quer dizer sem esses erros irritantes.
fonte