Exemples
J'ai récemment trouvé des exemples d'utilisation de paires d'accolades englobantes {}
, sans rien entre les accolades ouvrantes et fermantes, comme arguments des commandes et même de leurs options:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Pas de documentation
Mon problème est que je ne trouve pas de documentation dans le manuel GNU Bash qui décrit l'utilisation de {}
dans un tel contexte comme dans les exemples ci-dessus.
Je ne pense pas que ce soit une expansion de paramètre , car un signe dollar doit précéder les accolades englobantes dans une expansion de paramètre comme dans ${}
.
Ce ne peut pas non plus être une extension d'accolade , car elle prend la forme de {x..y[..incr]}
, où x
et y
non facultative.
Il ne peut pas non plus s'agir d'un groupe de commandes , car il {}
est utilisé comme arguments.
Des questions
Qu'est-ce qu'une paire d'accolades englobantes
{}
signifie même, en général, comme argument pour toute commande qui l'accepte?Où puis-je trouver une documentation décrivant l'utilisation de
{}
as comme arguments?
{}
- cetargets
qui signifie agir sur, avec lafind
commande, ce sont lesrm
fichiers supprimés / trouvés.Réponses:
Ces accolades bouclées sont laissées seules par bash; ils appartiennent
find
etxargs
, respectivement, et sont décrits dans leur man-pages.man find
man xargs
Edit: et ici POURQUOI bash ignore ces accolades:
man bash
Pour mettre l'accent: la liste doit se terminer par une nouvelle ligne ou un point-virgule .
la source
man xargs
n'ait même pas pris la peine d'expliquer ce que cela{}
signifie réellement, ni que l'auteur ait redirigé (sans jeu de mots) le lecteur vers l'explication de-exec
dans la page de manuel defind
.xargs -Iab echo ab
; c'est un choix purement arbitraire.-I
, je comprends maintenant ce que fait réellement cette option. Oui,{}
c'est arbitraire, comme vous l'avez dit. J'étais juste confus par l'explicationIf the replace-str argument is missing, the effect is the same as -I{}
. Si-I
sans argument était le même que-I{}
, alorscat foo | xargs -I echo {}
produirait le même résultat que l'exécutioncat foo | xargs -I{} echo {}
. Mais ce ne sont pas les mêmes. Le premier est une erreur, et ce qui m'a encore plus dérouté, c'est le message d'erreurxargs: {}: No such file or directory
, mais c'est simplement dû à la mise en œuvre.-I
(majuscule I) ne peut pas être exécuté sans argument. L'argument-I
étaitecho
. Il s'agit de la principale différence entre-I
et-i
(et la raison pour laquelle -i est déconseillée, car les options avec des arguments non requis sont rares et déroutantes)