GNU/Linux >> Linux Esercitazione >  >> Linux

Xargs:L'ordine delle opzioni è importante?

Inserisci 0

echo foo | xargs -L 1 -I '{}' echo '{}'

Uscita 0

foo

Inserimento 1

echo foo | xargs -I '{}' -L 1 echo '{}'

Uscita 1

{} foo

Perché cambiare l'ordine delle opzioni di xargs cambia l'output?

Versione:xargs (GNU findutils) 4.6.0

Risposta accettata:

Quando le opzioni fornite a xargs sono in conflitto, l'ordine può essere importante.

IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications Issue 7 ha aggiunto il testo seguente alle specifiche di xargs:

Il -io , -L e -n le opzioni si escludono a vicenda. Alcune implementazioni usano l'ultima specificata se ne viene fornita più di una su una riga di comando; altre implementazioni trattano le combinazioni delle opzioni in modi diversi.

Questo codifica il comportamento di molte implementazioni di xargs, risalendo alla versione originale in PWB/Unix, la cui pagina man dice

Quando ci sono conflitti di flag (ad es. -l rispetto a -n ), l'ultimo flag ha la precedenza.

Nella versione GNU di xargs, -L disabilita qualsiasi -I precedente opzione. Quindi nel tuo secondo esempio,

echo foo | xargs -I '{}' -L 1 echo '{}'

{} è solo un argomento normale passato a echo , senza che venga eseguita alcuna sostituzione.

Rispetto a IEEE Std 1003.1, edizione 2004/Specifiche Open Group Base Issue 6.


Linux
  1. In che modo Rm -r esegue la rimozione ricorsiva? In che ordine?

  2. Perché `md5sum` non fornisce lo stesso hash di Internet?

  3. In che modo il completamento automatico della scheda trova le opzioni da completare?

  4. xargs può separare i parametri?

  5. Perché xargs -L produce il formato corretto, mentre xargs -n no?

Cos'è POSIX? Perché è importante per gli utenti Linux/UNIX?

In `mentre Ifs=Leggi..`, perché Ifs non ha alcun effetto?

Cosa fa Eco $? Fare??

Leggi riga per riga nello script bash

Su Linux/Unix, .tar.gz rispetto a .zip è importante?

xargs --replace/-I per singoli argomenti