Entrada 0
echo foo | xargs -L 1 -I '{}' echo '{}'
Salida 0
foo
Entrada 1
echo foo | xargs -I '{}' -L 1 echo '{}'
Salida 1
{} foo
¿Por qué cambiar el orden de las opciones de xargs cambia la salida?
Versión:xargs (GNU findutils) 4.6.0
Respuesta aceptada:
Cuando las opciones dadas a xargs entran en conflicto, el orden puede ser importante.
IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications Issue 7 agregó el siguiente texto a la especificación de xargs:
El -yo , -L y -n las opciones son mutuamente excluyentes. Algunas implementaciones usan el último especificado si se proporciona más de uno en una línea de comando; otras implementaciones tratan las combinaciones de las opciones de diferentes maneras.
Esto codifica el comportamiento de muchas implementaciones de xargs, volviendo a la versión original en PWB/Unix, cuya página de manual dice
Cuando hay conflictos de banderas (por ejemplo, -l contra -n ), la última bandera tiene prioridad.
En la versión GNU de xargs, -L
deshabilita cualquier -I
anterior opción. Así que en tu segundo ejemplo,
echo foo | xargs -I '{}' -L 1 echo '{}'
{}
es solo un argumento ordinario pasado a echo
, sin que se realice ninguna sustitución.
En comparación con IEEE Std 1003.1, Edición 2004/Edición 6 de especificaciones de base de grupo abierto.