是否可以使用 xargs 来调用命令,以便修复命令的最后一个参数?
我的尝试:
printf '%s\n' a b c d | xargs -I{} echo {} LAST
Run Code Online (Sandbox Code Playgroud)
最终做
echo a LAST
echo b LAST
echo c LAST
echo d LAST
Run Code Online (Sandbox Code Playgroud)
我想让 xargs 调用
echo a b c d LAST
#fit as many as you can but always finish wiht LAST
Run Code Online (Sandbox Code Playgroud)
这是否可以做到,最好以便携式方式进行?
mos*_*svy 11
tl;博士; 这就是你可以便携地做到这一点的方法,没有-I
和其他破碎的花哨选项:
$ echo a b c d f g | xargs -n 2 sh -c 'echo "$@" LAST' sh
a b LAST
c d LAST
f g LAST
$ seq 1 100000 | xargs sh -c 'echo "$#" LAST' sh
23692 LAST
21841 LAST
21841 LAST
21841 LAST
10785 LAST
Run Code Online (Sandbox Code Playgroud)
该-I
选项的问题在于它被设计破坏了,并且没有办法绕过它:
$ echo a b c d f g | xargs -I {} -n 1 echo {} LAST
a b c d f g LAST
$ echo a b c d f g | xargs -I {} -n 2 echo {} LAST
{} LAST a b
{} LAST c d
{} LAST f g
Run Code Online (Sandbox Code Playgroud)
但它们可能已被覆盖,因为这就是标准所说的:
-I replstr ^[XSI] [Option Start] 插入模式:对标准输入中的每一行执行实用程序,将整行作为单个参数,将其插入到每次出现 replstr 的参数中。
它没有说明与-n
和-d
选项的交互,因此他们可以随心所欲地做任何事情。
这是在(较旧的)FreeBSD 上的情况,不太意外但非标准:
fzu$ echo a b c d f g | xargs -I {} -n 2 echo {} LAST
a b LAST
c d LAST
f g LAST
fzu$ echo a b c d f g | xargs -I {} -n 1 echo {} LAST
a LAST
b LAST
c LAST
d LAST
f LAST
g LAST
Run Code Online (Sandbox Code Playgroud)