【问题标题】:printf "-1" in bash gives error for unknown reasonbash中的printf“-1”由于未知原因给出错误
【发布时间】:2016-12-25 09:16:37
【问题描述】:

在 bash 3.2(最近的 macOS 上的默认设置)中,运行 printf "-1" 会给我一些类似这样的错误:

bash: printf: -1: invalid option

我在zsh 中没有问题,事实上,传递给printf 的任何字符串中的前导连字符都会触发该错误。 shellcheck 对此没有警告。也试过echo "-1",看起来不错。

我知道使用printf "%s" "-1" 可以避免该错误,但有人可以解释其背后的原因吗?谢谢。

【问题讨论】:

  • 你试过/usr/bin/printf -1 吗?

标签: bash printf


【解决方案1】:

对于符合标准语法的实用程序(echo 是一个明显的例外),以- 开头的前导操作数表示选项。即使命令不提供这些名称的选项,操作数也会被视为选项,从而导致您看到的错误消息。选项的显式结束可以用-- 表示:printf -- -1 将导致字符串-1 被解释为格式字符串并打印出来。

【讨论】:

  • 我在命令中双引号了-1,所以它不应该再被视为选项了吗?我猜。另外,zsh 似乎很好,所以我想知道它是否是 bash 中的东西。
  • @Lin 引用在命令看到它之前由 shell 处理,并且永远不会导致选项被视为非选项。即使该命令被实现为内置的 shell。试试sedecho abc | sed "-es/b/d/"。我不知道 zsh 是做什么的,我知道 bash 对printf 的处理是按照标准进行的。
  • @Lin zsh 可能根本没有为printf 提供任何选项,因此决定跳过实现选项解析。
猜你喜欢
  • 2014-01-02
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多