当第一个参数以破折号-开头时,Linux中的无效或无法识别的选项

时间:2019-07-15 04:16:42

标签: bash printf

如何用bash中的--打印双破折号(printf)? 我尝试了以下方法,但均无济于事:

$ printf "--moish"
$ printf -- "moish"
$ printf "\-\-moish"
$ printf "$-$-moish"

以下是相应的结果(一个错误,然后是其他三个)

bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

然后:

moish
\-\-moish
himBHshimBHsmoish

2 个答案:

答案 0 :(得分:1)

使用-在printf之后指定以下参数不是命令开关

在您的情况下使用:

$ printf -- "--monish\n"
--monish

答案 1 :(得分:1)

由于bash首先评估引号,所以评估的最后一行是

printf --moish

这使错误更加明显。这是bash中的一个常见错误,您的第一个非标志参数以连字符(-)开头,并且它是否为double无关紧要。据我所知,grep也经常发生这种情况。这使该工具认为您向其发送了一个标志,而不是参数。

大多数(如果不是全部)工具(因为这是POSIX事物)在这种情况下完全允许使用--标志-明确地告诉该工具,其后的所有事物都是常规参数,而不是标志:

printf -- --moish

请注意,引号甚至不是必需的。如果您想要的话,它们会是

printf -- "--moish\n"

防止过早评估“ \ n”。