'ls' 参数是否有既定顺序?

Is there any established order for 'ls' arguments?

我是一名学生,作为诅咒的一部分,我必须重新编写 ls 命令并尽可能重现其行为。

在 Mac (El Capitan 10.11.6) 上,使用终端 iTerm 2(zsh),我得到:

user> ls . -R
ls: -R: No such file or directory

在 Arch(最新版本)上,使用默认文本界面(bash)我得到:

user> ls . -R
<current directory content>

虽然我更愿意相信 Arch,但在指定目录后 ls 拒绝它的选项是否正确?是否有声明参数顺序的文档?

参见 POSIX utility syntax guidelines,条目 #9:

Guideline 9:

All options should precede operands on the command line.

因此,POSIX保证支持的用法是ls -R .,因为-R是一个选项,.是一个操作数。

GNU 工具通常不强制执行此准则(这就是为什么 Arch 允许您以相反的顺序放置参数)——但为了获得最大的可移植性,明智的做法是编写假定强制执行的软件。

如果您想 确定 -R 将被视为操作数而不是参数,无论您使用什么平台,您都可以使用 --将两个类别分开:ls -l -- -R 会将 -l 视为一个选项,将 -R 视为一个操作数,因此将查找名为 -R 的文件或目录并提供一个长-格式列表;这是由 POSIX 实用程序语法指南 #10 定义的。