printf"-1“;在bash中,由于未知原因而给出错误

printf"-1“;在bash中,由于未知原因而给出错误,bash,printf,Bash,Printf,在bash 3.2(最新macOS上的默认设置)中,运行printf“-1”会出现如下错误: bash: printf: -1: invalid option 我在zsh中没有问题,事实上,传递给printf的任何字符串中的前导连字符都会触发该错误外壳检查对此没有警告。还尝试了echo“-1”,看起来不错 我知道使用printf“%s”“-1”可以避免这个错误,但是有人能解释一下它背后的原因吗?谢谢。对于符合标准语法的实用程序(echo是一个明显的例外),以-开头的前导操作数表示选项。操作数被

在bash 3.2(最新macOS上的默认设置)中,运行
printf“-1”
会出现如下错误:

bash: printf: -1: invalid option
我在
zsh
中没有问题,事实上,传递给
printf
的任何字符串中的前导连字符都会触发该错误<代码>外壳检查对此没有警告。还尝试了
echo“-1”
,看起来不错


我知道使用
printf“%s”“-1”
可以避免这个错误,但是有人能解释一下它背后的原因吗?谢谢。

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

您是否尝试过
/usr/bin/printf-1
?我在命令中双重引用了-1,因此不应再将其视为选项?我想是吧。另外,zsh似乎还可以,所以我想知道它是否在bash中。@Lin引号是在命令看到它之前由shell处理的,并且从不导致选项被视为非选项。即使命令是作为shell内置实现的,也不行。使用
sed
echo abc | sed“-es/b/d/”
。我不知道zsh是做什么的,我知道bash是按照标准处理
printf
。@Lin可能是zsh根本没有为
printf
提供任何选项,因此决定跳过实现选项解析。