macos命令行参数最后不起作用

macos command line params not working at the end

在 linux 系统上,当您在 shell 中键入命令时,例如 rm * -rf*-rf 的顺序不会事情。我的 shell 以同样的方式解释它。现在,在我的 Mac 上,当我输入 rm -rf * 时,一切正常,但如果我输入 rm * -rf,则会出现错误 rm: -rf: No such file or directory

我在 macOS 和 linux 上尝试过,同时使用 fish 和 bash shells。同样的问题。

有谁知道为什么 macOS 上的命令解释器认为命令末尾的 -rf 没有被解释为命令的参数?

这与 shell 无关,而与命令有关。 命令行参数的解析不是 shell 的功能和责任,而是实际命令的功能和责任。 在这两个系统中,shell 忠实地按照指定的顺序传递命令行参数,然后由命令的实现来按照他们认为合适的方式解析它们。

在linux中,核心实用程序通常是 GNU 实现的, 而在 osx 上,核心实用程序通常是 BSD 实现。

命令的 man 页面应该会告诉您它是哪个实现。

例如Linux中man rm的最后一行是这样的:

GNU coreutils 8.21                March 2016                             RM(1)

在 osx:

BSD                            January 28, 1999                            BSD

任何 shell 中的参数顺序历来与 unix 相关。

rm 顺便说一句,甚至有一个选项 -- 停止解析选项(能够删除以“-”开头的文件,例如)

参见 rm(1) 和 getopt(3) 手册页

如果 shell 不遵守参数的顺序,它给出的结果将是这个序列:

$ touch a b 
$ mv a b 

将保留什么文件?