为什么*不*解析`ls`(以及怎么做)?
我一直看到答案引用此链接,并明确声明“请勿解析ls!”。这使我感到烦恼有两个原因: 似乎可以毫无疑问地完全接受了该链接中的信息,尽管我可以从随意阅读中至少挑出一些错误。 似乎该链接中提到的问题似乎没有激发寻求解决方案的欲望。 从第一段开始: ...当您请求[ls]文件列表时,存在一个巨大的问题:Unix允许文件名中的几乎所有字符,包括空格,换行符,逗号,管道符号以及几乎您尝试用作的任何其他内容。除NUL外的定界符。... ls用换行符分隔文件名。除非您的文件名中包含换行符,否则这没问题。而且由于我不知道有任何实现ls允许您使用NUL字符而不是换行符来终止文件名,因此我们无法使用来安全地获取文件名列表ls。 兄弟,对吗?如何以往我们可以处理一个换行符终止可能包含换行符数据集上市?好吧,如果在这个网站上回答问题的人们每天都没有做这种事情,我可能会觉得我们遇到了麻烦。 事实是,尽管大多数ls实现实际上提供了一个非常简单的api来解析其输出,我们一直都在做,甚至都没有意识到。您不仅可以以null结尾的文件名,还可以以null或可能需要的任何其他任意字符串开头的文件名。此外,您可以为每个文件类型分配这些任意字符串。请考虑: LS_COLORS='lc=\0:rc=:ec=\0\0\0:fi=:di=:' ls -l --color=always | cat -A total 4$ drwxr-xr-x 1 mikeserv mikeserv 0 Jul 10 01:05 ^@^@^@^@dir^@^@^@/$ -rw-r--r-- 1 mikeserv mikeserv 4 Jul 10 02:18 ^@file1^@^@^@$ -rw-r--r-- 1 mikeserv mikeserv 0 Jul 10 01:08 ^@file2^@^@^@$ -rw-r--r-- 1 mikeserv mikeserv 0 Jul …