Beispiele
Ich habe kürzlich Beispiele für die Verwendung von Paaren umschließender Klammern gefunden {}
, wobei zwischen den öffnenden und schließenden Klammern nichts als Argumente für Befehle und sogar für deren Optionen steht:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Keine Dokumentation
Mein Problem ist, dass ich im GNU Bash Manual keine Dokumentation finden kann , die die Verwendung {}
in einem solchen Kontext wie in den obigen Beispielen beschreibt.
Ich denke nicht, dass es sich um eine Parametererweiterung handelt , da bei einer Parametererweiterung wie in ein Dollarzeichen vor den einschließenden Klammern stehen muss ${}
.
Es kann auch keine Klammererweiterung sein, da sie die Form hat {x..y[..incr]}
, wo x
und y
nicht optional ist.
Es kann auch keine Befehlsgruppierung sein, da {}
sie als Argumente verwendet wird.
Fragen
Was bedeutet ein Paar umschließender Klammern
{}
im Allgemeinen überhaupt als Argument für einen Befehl, der es akzeptiert?Wo finde ich eine Dokumentation, die die Verwendung
{}
als Argumente beschreibt?
{}
bedeutettargets
, dass mit demfind
Befehlrm
Dateien entfernt / gefunden werden.Antworten:
Diese geschweiften Klammern werden durch Bash allein gelassen; sie gehören
find
undxargs
sind und werden in ihren Mann-Seiten beschrieben.man find
man xargs
Edit: und hier, warum Bash diese geschweiften Klammern ignoriert:
man bash
Zur Hervorhebung: Die Liste muss mit einem Zeilenumbruch oder einem Semikolon abgeschlossen werden .
quelle
man xargs
sich nicht einmal die Mühe gemacht hat zu erklären, was{}
eigentlich bedeutet, und der Autor den Leser nicht auf die Erklärung-exec
in der Manpage von umgeleitet hat (kein Wortspiel beabsichtigt)find
.xargs -Iab echo ab
; Es ist eine rein willkürliche Wahl.-I
, verstehe ich jetzt, was diese Option tatsächlich bewirkt. Ja,{}
ist willkürlich, wie Sie sagten. Die Erklärung hat mich nur verwirrtIf the replace-str argument is missing, the effect is the same as -I{}
. Wenn-I
ohne Argument dasselbe wäre wie-I{}
,cat foo | xargs -I echo {}
würde das gleiche Ergebnis wie beim Ausführen erzieltcat foo | xargs -I{} echo {}
. Sie sind jedoch nicht gleich. Ersteres ist ein Fehler, und was mich noch mehr verwirrte, war die Fehlermeldungxargs: {}: No such file or directory
, aber das liegt nur an der Implementierung.-I
(Großbuchstabe I) kann nicht ohne Argument ausgeführt werden. Das Argument-I
warecho
. Dies ist der Hauptunterschied zwischen-I
und-i
(und der Grund, warum -i veraltet ist, da Optionen mit nicht erforderlichen Argumenten ungewöhnlich und verwirrend sind)