Two arguments in a command with xargs and bash -c
You can use substitution -I{}
to put the argument into the middle of the command.
> echo "a\nb\nc\nd" | xargs -I{} echo {}!
a!
b!
c!
d!
I can use -L2
to provide exactly 2 arguments to the command:
> echo "a\nb\nc\nd" | xargs -I{} -L2 echo {}!
a b!
c d!
But I want to use two arguments, the first in one place, the next in another place:
> echo "a\nb\nc\nd" | xargs -I{} -L2 echo {}x{}!
a bxa b!
c dxa b!
I wanted axb!
but got a bxa b!
. In order to achieve this you have to pass arguments to a bash command.
> echo "a\nb\nc\nd" | xargs -L2 bash -c 'echo $0x$1!'
axb!
cxd!
Just like calling
bash -c 'echo $0x$1!' a b
Where $0
represents the first argument and $1
represents the second argument.