Ich versuche, printf zu verwenden, um einige hübsche Ausgaben in einem Bash-Skript zu formatieren
z.B:
-----------------------
| This is some output |
-----------------------
Aber ich bin über ein Verhalten gestolpert, das ich nicht verstehe.
$ printf "--"
gibt mir den fehler printf: usage: printf [-v var] format [arguments]
und
$ printf "-stuff"
führt zu-bash: printf: -s: invalid option
Anscheinend glaubt printf, ich würde versuchen, ein paar Argumente zu übergeben, ohne dass ich es tue.
Inzwischen habe ich ganz zufällig diese Problemumgehung gefunden:
$ printf -- "--- this works now ----\n"
gibt mir--- this works now ----
Kann jemand dieses Verhalten erklären?
echo
denen dies fehlschlagen würdeecho ------------
? Die meisten unterstützen nur-n
(keine abschließenden Zeilenumbrüche),-e
(interpretieren Zeichen mit umgekehrten Schrägstrichen) und sind möglich-E
(interpretieren Sie sie NICHT). (BEARBEITEN: GNU/bin/echo
unterstützt auch--help
und--version
.)Antworten:
Das
--
wird verwendet , um das Programm zu sagen , dass alles , was folgt sollte nicht als Befehlszeile interpretiert werden Option zuprintf
.Edit: Also das
printf "--"
du im Grunde versucht hast endete als "printf ohne Argumente" und ist damit gescheitert.quelle
--
, können Sie ausführenprintf -- --
.printf --
ist dasselbe wieprintf
(Sie erhalten die gleiche Nachricht)--
wird als eine Option interpretiert (in diesem Fall, um anzuzeigen, dass es keine weiteren Optionen gibt).Bei der Verwendung sollte immer eine Formatzeichenfolge angegeben werden
printf
, um eine falsche Interpretation zu vermeiden. Für Ihren speziellen Fall:quelle
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Es gibt Unterschiede zwischen printf builtin und / usr / bin / printf, der zweite macht "was du meinst" ohne diese lästigen Fehler.
quelle