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.