web-dev-qa-db-fra.com

Accolades vides et point-virgule en bash

Qu'est-ce que

{} \;

chaîne signifie bash?

Je l'ai vu plusieurs fois, par exemple, pour trouver et supprimer tous les fichiers par leur nom, il faut les exécuter

find . -name "FILE-TO-FIND" -exec rm -rf {} \;

Que fait cette chaîne?

5
spiderface

{} et ; ont tous deux une signification particulière dans bash, mais dans le contexte de find, c’est find qui interprète ces deux éléments (en fait, nous voulons find pour interpréter ces deux).

Tout d'abord, -exec est une action de find. {} et ; sont des paramètres spéciaux pour le prédicat -exec de find.

La syntaxe de l'action -exec est la suivante:

-exec command ;

ou

-exec command {} + 

Nous devons donc empêcher {} et ; d'être interprétés au préalable par Shell.

Dans le contexte de find .... -exec:

  • {} indique (contient) le ou les résultats de l'expression find c'est-à-dire find . -name "FILE-TO-FIND" dans ce cas. Notez que les accolades vides {} n’ont aucune signification particulière pour Shell, nous pouvons donc nous échapper sans nous échapper {}

  • Comme bash traite ; comme fin d'une commande, nous devons y échapper avec \ c'est-à-dire \; afin qu'il puisse être analysé par -exec et non par bash lui-même.

7
heemayl