2017-12-21 9 views
1

printfを使って何度も " - "を印刷しようとしています。私は以下のコマンドを同じ文字のマルチプリントに使用していますが、これは " - "以外のすべてに対してうまくいきます。printfを使って " - "を印刷するには

printf "`printf '=%.0s' {1..30}` \n" 

" - "と同じことをしようとするとエラーになります。

printf "`printf '-%.0s' {1..30}` \n" 
bash: printf: -%: invalid option 

これはユーザーが受け入れたオプションとして受け取ります。これを回避するにはどうしたらいいですか? OSは、Linux 6は、各printf呼び出しに他のすべての前にパス--

+2

@TomFenech、私は推測します。 –

答えて

3

である:多くのコマンドと同様に

printf -- "`printf -- '-%.0s' {1..30}` \n" 

-v--だけですがprintfは(-で始まるトークンの形でオプションを取ります私が知っているオプション)。 printfは、代わりに-%.0sをオプションとして解析しようとしているため、これは引数文字列と干渉します。しかし、このケースでは、他の多くのコマンドと同様に、--オプションをサポートしています。これはオプションの解析を終了し、その後のすべての引数を文字通り通過させます。

+0

私はこれを試して通知します... – Marcos

+0

@Siguraこれは完璧に動作します...そして、私の問題の別の問題を解決しました... 権限を持つファイルのリストを出力するためにprintfを使用すると、 '-rwx'の '-r'です。 – Marcos

1

30個のハイフンを印刷しようとしていますか?これは、私はそれを行う方法:

ruler() { printf "%*s\n" "$1" "" | sed "s/ /${2//\//\\\/}/g"; } 
:これは、関数にカプセル化することができ

printf "%*s\n" 30 "" | sed 's/ /-/g' 

のprintfコマンドは、プリント30個のスペースを持つ行が、その後、ハイフンにそれらのすべてをオンにするsedを使用します

そしてあなたのようなものを行うことができます。改行を取得するには

ruler $(tput cols) = 
+0

このようなことをしようとすると、これはちょっと複雑になることがあります - printf "printf ' - %。0s' {1..30}' \ n $ Marcos

+0

あなたのコメントが分かりません。コードの書式設定にバッククイックを使用し、コード内でバッククォートの代わりに '$()'を使用する –

関連する問題