Ejemplos
Recientemente he encontrado ejemplos del uso de pares de llaves {}
, sin nada entre las llaves de apertura y cierre, como argumentos para los comandos e incluso para sus opciones:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Sin documentación
Mi problema es que no puedo encontrar una documentación en el Manual de GNU Bash que describa el uso {}
en el contexto de los ejemplos anteriores.
No creo que sea una expansión de parámetros , porque un signo de dólar debe preceder a las llaves en una expansión de parámetros como en ${}
.
Tampoco puede ser una expansión de llaves, porque toma la forma de {x..y[..incr]}
, donde x
y y
no son opcionales.
Tampoco puede ser una agrupación de comandos , porque {}
se usa como argumentos.
Preguntas
¿Qué
{}
significa incluso un par de llaves encerradas , en general, como argumento para cualquier comando que lo acepte?¿Dónde puedo encontrar una documentación que describa el uso de
{}
como argumentos?
{}
, lotargets
que significa actuar, con elfind
comando, es eliminar /rm
encontrar archivos.Respuestas:
Estas llaves se dejan solas por bash; pertenecen
find
yxargs
, respectivamente, y se describen en sus páginas de manual.man find
man xargs
Editar: y aquí POR QUÉ bash ignora esas llaves:
man bash
Para enfatizar: la lista debe terminarse con una nueva línea o punto y coma .
fuente
man xargs
ni siquiera se molestó en explicar lo que{}
realmente significa, ni el autor redirigió (sin juego de palabras) al lector a la explicación-exec
en la página de manual defind
.xargs -Iab echo ab
; Es una elección puramente arbitraria.-I
, ahora entiendo qué hace realmente esa opción. Sí,{}
es arbitrario, como dijiste. Estaba confundido por la explicaciónIf the replace-str argument is missing, the effect is the same as -I{}
. Si-I
sin argumento fuera el mismo que-I{}
,cat foo | xargs -I echo {}
produciría el mismo resultado que ejecutarcat foo | xargs -I{} echo {}
. Sin embargo, no son lo mismo. El primero es un error, y lo que me confundió aún más fue el mensaje de errorxargs: {}: No such file or directory
, pero eso se debe solo a la implementación.-I
(mayúscula I) no se puede ejecutar sin un argumento. El argumento para-I
fueecho
. Esta es la principal diferencia entre-I
y-i
(y la razón -i está en desuso, ya que las opciones con argumentos no obligatorios son poco comunes y confusas)