Bash 中命令行选项的位置

Bash 中命令行选项的位置

我刚刚开始使用 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

原因可能在于命令行处理库,但如果我不得不猜测严格排序库的动机,那就是为了强制一致性。首先是命名参数,然后是位置参数。一旦强制一致性,命令行就更容易在头脑中解析。

相关内容