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 ----
誰かがこの動作を説明できますか?
--
を使用して、次のことをプログラムに伝えるnotをコマンドラインとして解釈するoptionto printf
。
したがって、printf "--"
基本的に "printf
引数なし"として試行したため、失敗しました。
--
はオプションとして解釈されます(この場合、これ以上オプションがないことを示します)。
不正な解釈を防ぐために、printf
を使用するときは、フォーマット文字列alwaysを含める必要があります。あなたの特定のケースについて:
printf '%s\n' '-----------------------'
組み込みのprintfと/ usr/bin/printfとの間には違いがあります。2番目のものは、これらの煩わしいエラーなしに「あなたの意図すること」を実行します。
printf "-----" # error
printf -- "-----" # ok
/usr/bin/printf "-----" # ok
/usr/bin/printf -- "-----" # ok