在bash 3.2中(默认情况下在最近的macOS上),运行printf "-1"
会给我一些错误:
bash: printf: -1: invalid option
我在zsh
中没有问题,实际上,传递给printf
的任何字符串中的前导连字符都会触发该错误。 shellcheck
没有对此发出警告。还试过echo "-1"
,看起来很好。
我知道使用printf "%s" "-1"
可以避免错误,但有人可以解释其背后的原因吗?感谢。
答案 0 :(得分:2)
对于符合标准语法(echo
是一个值得注意的例外)的实用程序,以-
开头的前导操作数表示选项。操作数被视为选项,即使命令不提供这些名称的选项,也会导致您看到的错误消息。可以使用--
指示选项的显式结尾:printf -- -1
将导致字符串-1
被解释为格式字符串并打印。