注:我的答案是不是在OP的情况下有效,且仅适用于工具以下约定命名究竟只是一个文件的情况下,下方未提及-
(DASH)的特殊情况,这往往也是指定从标准,阅读期望输入。请参阅已接受的答案。
将其保留在此处,因为它包含了在寻找答案时可能偶然发现的其他情况的有用信息。
双重破折号!
使用标准的双破折号(--
)约定来表示最后一个参数:
less -- -FILENAME
例
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
哇哈
此--
参数源于Shell实用程序和命令行工具的大多数实现所支持的约定,并且大多数Shell显然主张在实现CLI工具时应遵循该约定。
开放小组推荐
OpenGroup还在其基本规范的“ 实用程序描述默认值(v6)”部分中提到了它:
默认行为:不接受选项但接受操作数的标准实用程序应将“-”识别为要丢弃的第一个参数。
识别“-”的要求是因为符合标准的应用程序需要一种方法来屏蔽其操作数,使其不受实现可能提供的任何扩展选项的影响。例如,如果标准实用程序foo被列为不带任何选项,并且应用程序需要为其指定路径名并带有前导连字符,则可以安全地执行以下操作:
foo -- -myfile
并避免将-m用作扩展名。
在实用程序语法准则(v7)中:
准则10:
不是选项参数的第一个参数应作为表示选项结束的定界符而接受。以下任何参数都应视为操作数,即使它们以'-'字符开头。
Bash推荐
从bash手册中摘录的有关支持它的内置文件的内容如下:
除非另有说明,否则本节中记录为接受选项的每个内置命令均以-接受-开头,表示这些选项的结尾。
:,true,false和test内置函数不接受选项,也不对其进行特殊处理。退出,注销,中断,继续,让和移位内置函数接受并处理以-开头的参数,而不需要-。其他接受参数但未指定为接受选项的内建函数将以-开头的参数解释为无效选项,并要求-防止这种解释。
请注意,echo不会解释-表示选项的结尾。
附加阅读