Zadejte 0
echo foo | xargs -L 1 -I '{}' echo '{}'
Výstup 0
foo
Vstup 1
echo foo | xargs -I '{}' -L 1 echo '{}'
Výstup 1
{} foo
Proč změna pořadí možností xargů změní výstup?
Verze:xargs (GNU findutils) 4.6.0
Přijatá odpověď:
Když jsou možnosti dané xargům v konfliktu, na pořadí může záležet.
IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications, vydání 7 přidalo následující text do specifikace xargů:
-I , -L a -n možnosti se vzájemně vylučují. Některé implementace používají poslední zadanou, pokud je na příkazovém řádku uvedeno více než jedna; jiné implementace zacházejí s kombinacemi možností různými způsoby.
To kodifikuje chování mnoha implementací xargs a vrací se k původní verzi v PWB/Unix, jejíž manuálová stránka říká
Pokud dojde ke konfliktům příznaků (např. -l vs. -n ), poslední příznak má přednost.
V GNU verzi xargs -L
deaktivuje všechny předchozí -I
volba. Takže ve vašem druhém příkladu
echo foo | xargs -I '{}' -L 1 echo '{}'
{}
je jen obyčejný argument předaný do echo
, aniž by se provedlo nahrazování.
V porovnání s IEEE Std 1003.1, 2004 Edition/Open Group Base Specifications, vydání 6.