Une variable var
contient plusieurs arguments, chacun divisé par une nouvelle ligne.
echo "$var" | xargs -I % echo ABC %
#Results in:
#ABC One
#ABC Two
#ABC Three
Cependant, en omettant -I
et le %
caractères, je reçois le texte suivant:
echo "$var" | xargs echo ABC
#Results in:
#ABC One Two Three
Une fois que j'ai lu, {} remplacerait l'argument actuel (comme le ferait find), mais cela ne se produit pas. Qu'est-ce que je fais mal?
Also, unquoted blanks do not terminate input items; instead the separator is the newline character.
- cela est essentiel pour comprendre le comportement. Sans pour autant-I
,xargs
ne voit l'entrée que sous la forme d'un seul champ, car newline n'est pas un séparateur de champ. Avec-I
, soudainement newline est un séparateur de champ, et doncxargs
voit trois champs (qu'il itère sur). C’est un vrai point subtil, mais est expliqué dans leman
citations de page.Si vous utilisez GNU Parallel au lieu de xargs, vous pouvez contrôler le comportement souhaité:
Il faut littéralement 10 secondes pour installer GNU Parallel:
Regardez les vidéos d'introduction pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
la source