Próbuję użyć printf do sformatowania jakiegoś ładnego wyniku w skrypcie bash
na przykład:
-----------------------
| This is some output |
-----------------------
Ale potknąłem się o pewne zachowania, których nie rozumiem.
$ printf "--"
daje mi błąd printf: usage: printf [-v var] format [arguments]
i
$ printf "-stuff"
wyniki w-bash: printf: -s: invalid option
Najwyraźniej printf uważa, że próbuję przekazać pewne argumenty, a ja nie.
Tymczasem zupełnie przypadkowo znalazłem to obejście:
$ printf -- "--- this works now ----\n"
daje mi--- this works now ----
Czy ktoś może wyjaśnić to zachowanie?
echo
które się nie powiedzieecho ------------
? Większość obsługuje tylko-n
(nie ma końca nowej linii),-e
(interpretuje znaki specjalne z odwrotnym ukośnikiem) i jest możliwa-E
(NIE interpretuje ich) i nie popełnia błędów, gdy napotkane zostaną inne argumenty podobne do opcji, prawda? (EDYCJA: GNU/bin/echo
obsługuje również--help
i--version
.)Odpowiedzi:
--
Jest używany, aby powiedzieć, że niezależnie od programu następuje powinno nie być interpretowane jako wiersza poleceń opcji doprintf
.Edycja: w ten sposób
printf "--"
próbujesz w zasadzie skończyć jako „printf bez argumentów” i dlatego nie powiodło się.źródło
--
, możesz uruchomićprintf -- --
.printf --
jest taki sam jakprintf
(otrzymujesz tę samą wiadomość)printf -- $fmt
nie jest przenośny. Na busyboksie 1.30.1printf -- '%s\n' hello
wydajność--
. Zobacz także: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
jest interpretowane jako opcja (w tym przypadku oznacza, że nie ma już żadnych opcji).Podczas używania należy zawsze dołączać ciąg formatu,
printf
aby zapobiec złej interpretacji. W konkretnym przypadku:źródło
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Istnieją różnice między wbudowanym printf a / usr / bin / printf, drugi robi „to, co masz na myśli” bez tych irytujących błędów.
źródło