我注意到在https://unix.stackexchange.com/a/459007/674,该单破折号-
用于表示选项参数的结束。
--
双破折号也可以表示选项参数的结束,这是否正确?
那他们有什么区别呢?什么时候用哪个?它们都是 GNU 约定吗?谢谢。
答案1
单破折号根据定义是一个文件类型参数,在文件类型参数之后,不允许符合 POSIX 的应用程序检查选项。
双破折号是选项结尾的 POSIX 定义。之后,仅允许文件类型参数。
因此,尽管最终可能会产生相似的结果,但两者的约定是不同的。
这不是 GNU 约定,而是 POSIX。
另请注意,约定编写:
#!/bin/sh -
或者
#!/bin/sh -p
getopt(3)
是从 -- 特殊参数和函数都不知道的时代开始的。
答案2
具体来说,Bash 接受-
作为 的同义词--
。在问题引用的答案中给出的示例中,
#! /bin/bash -
这用于告诉 Bash 后面不再有任何选项,以便无论脚本的名称如何,shebang 都可以工作 - 例如,考虑如果脚本被命名为 会发生什么-l
。