web-dev-qa-db-ja.com

printfのダッシュ

Printfを使用して、bashスクリプトのかなりの出力をフォーマットしようとしています

例えば。:

-----------------------  
| This is some output | 
-----------------------

しかし、私は理解できないいくつかの動作につまずきました。

$ printf "--"

私にエラーを与えます:

printf:使用法:printf [-v var]形式[引数]

そして

$ printf "-stuff"

結果は

-bash:printf:-s:無効なオプション

したがって、どうやらprintfは、私がそうではないときに、いくつかの引数を渡そうとしていると考えています。

一方、完全に偶然に、私はこの回避策を見つけました:

$ printf -- "--- this works now ----\n"

くれます

--- this works now ----

誰かがこの動作を説明できますか?

40

--を使用して、次のことをプログラムに伝えるnotをコマンドラインとして解釈するoptionto printf

したがって、printf "--"基本的に "printf引数なし"として試行したため、失敗しました。

48
sr_

--はオプションとして解釈されます(この場合、これ以上オプションがないことを示します)。

不正な解釈を防ぐために、printfを使用するときは、フォーマット文字列alwaysを含める必要があります。あなたの特定のケースについて:

printf '%s\n' '-----------------------'
26
Chris Down

組み込みのprintfと/ usr/bin/printfとの間には違いがあります。2番目のものは、これらの煩わしいエラーなしに「あなたの意図すること」を実行します。

printf "-----"             # error
printf -- "-----"          # ok
/usr/bin/printf "-----"    # ok
/usr/bin/printf -- "-----" # ok
4
BOC