在Linux系统上,当您在rm * -rf
等shell中键入命令时,*
和-rf
的顺序无关紧要。我的shell以同样的方式解释它。现在,在我的Mac上输入rm -rf *
时,一切正常,但如果我rm * -rf
出现错误rm: -rf: No such file or directory
我在macOS和linux上尝试过使用fish和bash shell。同样的问题。
有没有人知道为什么macOS上的命令解释器认为命令末尾的-rf
没有被解释为命令的参数?
答案 0 :(得分:2)
这不是关于shell,而是关于命令。 解析命令行参数不是shell的功能和责任,而是实际命令的功能和责任。 在这两个系统中,shell忠实地以命令行的顺序传递命令行参数,然后由命令的实现来解析它们。[/ p>
在linux中,核心实用程序通常是GNU实现, 在osx上,核心实用程序通常是BSD实现。
命令的man
页面应该告诉你它是哪个实现。
例如,Linux中man rm
的最后一行是这样的:
GNU coreutils 8.21 March 2016 RM(1)
在osx上:
BSD January 28, 1999 BSD
答案 1 :(得分:1)
任何shell中的参数顺序在历史上都与unix相关。
顺便提一下,甚至还有一个选项 - 停止解析选项(能够删除以“ - ”开头的文件,例如。)参见rm(1)和getopt(3)手册页
如果shell不遵守参数的顺序,那么它的结果将是这个序列的结果:
$ touch a b
$ mv a b
将保留哪个文件?