Linux 为什么xargs-L产生正确的格式,而xargs-n没有';T

Linux 为什么xargs-L产生正确的格式,而xargs-n没有';T,linux,shell,unix,whitespace,xargs,Linux,Shell,Unix,Whitespace,Xargs,考虑以下几点: $ echo index.html* | xargs -L 1 ls -l -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1 -rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2 -rw-r--r-- 1 zeki zeki 146

考虑以下几点:

$ echo index.html* | xargs -L 1 ls -l
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:18 index.html
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:20 index.html.1
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:21 index.html.2
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3
$ echo index.html* | xargs -n 1 ls -l
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3

为什么-n选项会产生不正确的格式?以防万一,我正在Ubuntu下使用bash。谢谢。

-L
按行拆分
echo
不按行而是按空格分隔其输出,因此运行单个
ls-l
,将所有列格式化为一个组

-n
按参数拆分;在没有
-L
-0
的情况下,分隔符是空白(可能通过引用修改),因此每个文件名都有自己的
ls-L
运行,独立运行无法协调列宽。

POSIX标准:

-L
编号

应针对标准输入参数的每个非空
编号
执行该实用程序。最后一次调用实用程序时,如果剩余的参数行数少于个,则应使用更少的参数行。被视为以第一个字符结尾,除非该行的最后一个字符是
;尾随的
表示继续到下一个非空行(包括)

-n
编号

使用尽可能多的标准输入参数调用实用程序,最多使用个(正十进制整数)参数

由于
echo*
生成一行,
xargs-L 1
只需将所有文件名一次馈送到
ls
,然后才能很好地对齐列


(换句话说,您的第一个命令相当于
ls-l index.html*
,只是它不能正确处理包含空格的文件名。)

关于
-l
按行拆分和
-n
按空格拆分的最小可运行示例

这应该进一步澄清:

按行拆分,因此相当于:

echo 1 2
echo 3 4
echo 1
echo 2
echo 3
echo 4
哪些产出:

1 2
3 4
然而:

printf '1 2\n3 4\n' | xargs -n1 echo
在任何空格上拆分,因此相当于:

echo 1 2
echo 3 4
echo 1
echo 2
echo 3
echo 4
而是产生:

1
2
3
4
可移植性

正如在
-L
中所提到的,它的可移植性稍差,因为它是XSI POSIX扩展,而
-n
则不是