【问题标题】:Invalid or unrecognized option in Linux when first argument begins with dash `-` [duplicate]当第一个参数以破折号`-`开头时,Linux中的选项无效或无法识别[重复]
【发布时间】:2019-07-15 04:16:42
【问题描述】:

如何在 bash 中使用 printf 打印双破折号 (--)? 我尝试了以下但没有奏效:

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

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

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

然后:

moish
\-\-moish
himBHshimBHsmoish

【问题讨论】:

  • 在 Unix&Linux 上有一个相关的帖子:unix.stackexchange.com/q/490933
  • printf -- "--moish\n"(当第一个非选项参数以 '-' 开头时,POSIX 要求 -- 指示选项结束)
  • 超级用户superuser.com/questions/1371834/…的另一个相关帖子
  • printf "%s\n" "--moish"
  • 编辑了问题标题,使其范围更广,因为这不仅涉及printf

标签: bash printf


【解决方案1】:

由于bash首先计算引号,所以最后计算的行是

printf --moish

这使错误更加明显。这是 bash 中的一个常见错误,您的第一个非标志参数以破折号 (-) 开头,它是否是双倍也没关系。据我所知,grep 也经常发生这种情况。这使该工具认为您向它发送了一个标志而不是参数。

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

printf -- --moish

请注意,引号甚至不是强制性的。如果你愿意,他们会是虽然

printf -- "--moish\n"

防止过早评估“\n”。

【讨论】:

    【解决方案2】:

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

    所以你的情况使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2023-03-05
      • 2013-12-02
      • 2020-11-15
      相关资源
      最近更新 更多