GNU/Linux >> Tutoriales Linux >  >> Linux

Xargs:¿Importa el orden de las opciones?

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.


Linux
  1. ¿Cómo hace Rm -r para eliminar recursivamente? ¿En qué orden?

  2. En `while Ifs=Read..`, ¿por qué Ifs no tiene efecto?

  3. Leer línea por línea en bash script

  4. ¿Pueden xargs separar parámetros?

  5. ¿Por qué xargs -L produce el formato correcto, mientras que xargs -n no?

xargs --replace/-I para argumentos individuales

¿Qué significa la opción sw en /etc/fstab?

¿Qué hace % en las cadenas de shell de Linux?

¿Cómo prueba bash 'falso'?

¿Qué significa el último - (guión) en las opciones de `bash`?

¿Qué hace echo $? ¿hacer?