从标准输入转换的参数数量是否必须与命令中占位符的数量相同?

从标准输入转换的参数数量是否必须与命令中占位符的数量相同?

xargs从标准输入流创建多个参数时(-d可以指定用于将标准输入流拆分为多个参数的分隔符),如何xargs在要执行的命令中重新排列它们?

xargs有一个选项-I可以指定命令中的占位符以替换参数。当xargs从 stdin 输入流创建多个参数时,占位符出现的次数是否必须与参数的数量相同?

例如,从标准输入转换的参数数量是否必须与命令中占位符的数量相同?

$ xargs -I x -d " " ls x x x
-l -t -r

答案1

你可以自己尝试一下

$ echo -n a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g g g

从手册中:

-I Replace-str
用从标准输入读取的名称替换初始参数中出现的replace-str。此外,不带引号的空格不会终止输入项;相反,分隔符是换行符。 意味着 -x 和 -L 1

-L max-lines
每个命令行最多使用 max-lines 非空白输入行。尾随空白导致输入行在逻辑上继续到下一个输入行。意味着-x。

因此-I意味着-L 1每次调用仅使用一个参数。正如您所看到的,每次出现的x都被替换为参数。

还有一个乍一看可能会令人惊讶的效果:

$ echo a b c d e f g | xargs -I x -d " " echo x x x
a a a
b b b
c c c
d d d
e e e
f f f
g
 g
 g

如果没有选项-n,echo 将在末尾输出换行符。使用 option 时-dxargs不会将换行符视为分隔符,而是参数的一部分,因此g\n:的输出中会出现换行符g\n g\n g\n

相关内容