Traços no printf

27

Estou tentando usar o printf para formatar algumas saídas bonitas em um script bash

por exemplo: ----------------------- e | This is some output | e -----------------------

Mas eu 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

Então aparentemente o printf acha que estou tentando passar alguns argumentos enquanto eu não estou.

Enquanto isso, completamente por acaso, encontrei esta solução: $ printf -- "--- this works now ----\n" me dá --- this works now ----

Alguém pode explicar esse comportamento?

    
por Kenny Rasschaert 17.10.2011 / 13:42

3 respostas

36

O -- é usado para dizer ao programa que o que quer que se segue deve não ser interpretado como uma linha de comando opção para printf .

Edit: Assim, o printf "--" que você tentou basicamente acabou sendo "printf sem argumentos" e, portanto, falhou.

    
por 17.10.2011 / 13:50
15

-- está sendo interpretado como uma opção (neste caso, para significar que não há mais opções).

Uma string de formato deve ser sempre incluída ao usar printf para evitar interpretações incorretas. Para o seu caso particular:

printf '%s\n' '-----------------------'
    
por 17.10.2011 / 14:47
2

Existem diferenças entre printf builtin e / usr / bin / printf, o segundo faz "o que você quer dizer" sem esses erros irritantes.

printf "-----"             # error
printf -- "-----"          # ok
/usr/bin/printf "-----"    # ok
/usr/bin/printf -- "-----" # ok
    
por 20.09.2017 / 11:41

Tags