【问题标题】:Is there any established order for 'ls' arguments?'ls' 参数是否有任何既定顺序?
【发布时间】:2017-07-26 21:00:21
【问题描述】:

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

在 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 在指定目录后拒绝它的选项是否正确?是否有任何文件声明参数顺序?

【问题讨论】:

  • 顺便说一句,ls 不是 bash 或 zsh 的一部分,而是操作系统供应商提供的外部命令;它在给定操作系统上的行为相同(除非安装了替代版本,如 Macports 或 Homebrew,缺少函数、别名或其他显式改变行为的配置),无论哪个 shell 正在使用。
  • 我不确定,这就是我包含它的原因^^感谢您告诉我

标签: bash shell posix zsh ls


【解决方案1】:

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

准则 9:

所有选项都应该在命令行上的操作数之前。

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

GNU 工具通常不会强制执行此准则(这就是 Arch 允许您以相反顺序排列参数的原因)——但为了获得最大的可移植性,最好在编写软件时假设它被强制执行。

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

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 2017-10-01
    • 2020-10-19
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多