'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 定义的。
我是一名学生,作为诅咒的一部分,我必须重新编写 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 定义的。