当我在1986年开始教授Unix时,Unix ls(1)实用程序将文件列表打印到stdout,每行一个。解释不需要告诉您一个目录中有多少个文件的程序的概念很简单:
您有一个每行输出一个文件名的程序,还有一个计算输入行数的程序;如果您通过管道将第一个文件名的输出与第二个文件名的输入组合在一起,您将获得所需的信息。
当ls将其默认行为更改为以多列格式输出文件名时,这个简单的想法变得有点麻烦:可以理解的是,当学生在shell中调用该程序时,他们没有立即意识到ls是在玩isatty(3)的把戏。当然不是,他们应该怎么做呢?
当然,我们随后在终端上展示了ls-1的效果,并用ls|cat等进行了演示,但它就是不一样。(当时我从使用ls改为使用who(1)-很容易做到,因为它们是多用户系统,并且示例很有意义。)。
今天,在Linux的一些版本中,ls在包含空格的文件名两边加了单引号,可能是为了使这些路径更容易复制和粘贴,但只有在!isatty()的情况下才会这样做。
我不太喜欢更改程序的众所周知的行为,特别是在GNU ls这样的情况下,它已经使用环境变量对输出进行着色;在文件名引号中增加环境变量可能会很容易。
以前教起来比较简单。(但我不再真正教Unix初学者。):-)