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
则不是