2016-12-25 55 views
2

在bash 3.2(默認情況下,最近的MacOS),運行printf "-1"給我一些錯誤是這樣的:printf的「-1」在bash給出錯誤原因不明

bash: printf: -1: invalid option 

這我倒沒有問題zsh,實際上,任何傳遞給printf的字符串中的前導連字符都會觸發該錯誤。 shellcheck對此沒有警告。也試過echo "-1",看起來不錯。

我知道錯誤是可以通過使用printf "%s" "-1"避免的,但有人可以解釋其背後的原因嗎?謝謝。

+0

你試過'/ usr/bin/printf -1'嗎? –

回答

2

對於符合標準語法的實用程序(echo是一個顯着的例外),以-開頭的主要操作數指示選項。即使命令沒有提供這些名稱的選項,操作數也會被視爲選項,導致您看到的錯誤消息。可以用--指示選項的明確結尾:printf -- -1將導致字符串-1被解釋爲格式字符串並被打印。

+0

我在命令中加了雙引號-1,所以它不應該再作爲選項處理?我猜。另外,zsh似乎很好,所以我不知道它是否是bash中的東西。 – Lin

+0

@Lin引用在命令看到之前由shell處理,並且永遠不會將選項視爲非選項。即使該命令是作爲內置的shell實現的。用'sed'試試它:'echo abc | sed「-es/b/d /」'。我不知道zsh做了什麼,我知道bash在這裏按照標準處理'printf'。 – hvd

+0

@Lin可能zsh根本沒有爲'printf'提供任何選項,並因此決定跳過實現選項解析。 – hvd