我刚刚开始使用 Mac,但令我沮丧的是,为了使这个命令有效,命令后面必须立即添加命令行选项:
ls -la /usr
但这不行:
ls /usr -la
ls: -la: No such file or directory
有什么办法可以改变这种情况吗?或者有人能告诉我为什么在大多数 Linux 平台上选项的位置是不可知的,但在 Mac 上却可以吗?
答案1
Linux 使用 GNU 工具。OS X 使用 BSD 工具。BSD 工具对于命令行参数的顺序和存在性要求更高。
答案2
命令行处理是在程序的源代码中确定的,成为特定的命令。
通常情况下,一组命令会使用特定的命令行处理库(GNU getargs,或者 Perl 脚本中的 GetOpts::Long 就是这样的例子),但命令行处理是手动的还是使用任何特定的库完全取决于命令。
因此,命令行处理的能力(例如,支持重新排序、使用来--
描绘标志的结束、折叠成-a -b
等等-ab
)完全取决于各个应用程序的源代码和/或它们使用的库。
您注意到的特定模式可能是由于 Linux(其 GNU 根源)和 OSX(IIRC、BSD 起源但不确定)之间的命令行处理库(或开发人员使用的单独手动 arg 处理代码)不同
答案3
原因可能在于命令行处理库,但如果我不得不猜测严格排序库的动机,那就是为了强制一致性。首先是命名参数,然后是位置参数。一旦强制一致性,命令行就更容易在头脑中解析。