GNU/Linux >> Znalost Linux >  >> Linux

Xargs:Záleží na pořadí možností?

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.


Linux
  1. Proč `md5sum` nedává stejný hash jako internet?

  2. Proč nemají Ifs žádný účinek v `když Ifs=číst...`?

  3. Co dělá Echo $? Dělat??

  1. Čtěte řádek po řádku v bash skriptu

  2. může xargs oddělit parametry?

  3. Proč xargs -L poskytuje správný formát, zatímco xargs -n ne?

  1. Jak linuxové jádro určuje pořadí volání __init?

  2. Co dělá `set -x`?

  3. xargs --replace/-I pro jednotlivé argumenty