Stack Overflowへの次の答えは
合理的なアプローチを強制するPOSIX-ly は以下のように単一文字を繰り返します。この例では、等号を100回使用します。
printf %100s | tr " " "="
私の問題は、それがどのように機能するのか理解していないということです。簡単な説明を好む。こんなコメントはつけないでくださいドキュメントを読むtr
、私が賢くなくてこんな主張をするようになりましたが、そんなprintf
主張を使ったことも見たこともなくてこんな質問をします。
ベストアンサー1
つまり、printf %100s
100個の空白が印刷されてtr " " "="
等号に変換されるため、効果的に100個の等号が印刷されます。
それを破壊する:
printf
組み込みシェルです。通常、2つ以上のパラメータが使用され、最初のパラメータは「フォーマット文字列」であり、残りのパラメータはこの形式文字列のプレースホルダを埋めるために使用されます。テンプレートが完全に埋められると、結果が印刷されます。引数がさらにある場合は、再起動してより多くの引数を入力し、結果の文字列を印刷します。
で使用される書式文字列は、printf
単一文字で始まり終わる書式指定をとるため、整数(10進数、つまり「d」)を表し、浮動小数点数を表し、文字列を表します。文字以外の次の文字は型指定の修飾子であり、特に出力中に要求されるフィールドの長さを指定するために使用される数値です。したがって、文字列は少なくとも100文字の形式で指定され、スペースで埋められて左揃えされます(つまり、文字列の先頭にスペースが追加されます)。%
%d
%f
%s
%
%100s
追加の引数が渡されると、そのフィールドに使用されます%s
。たとえば、printf %100s abc
97個の空白が印刷され(3つの「abc」を考慮して合計100個の空白)、実際の文字列「abc」が表示されます。ただし、引数が指定されていない場合、型指定は空またはnull引数で埋められます(の場合は空の%s
文字列になり、その場合は0になります%d
)。したがって、これは空の引数を渡すのと同じです。文字列(たとえば、printf %100s ''
最終結果は100文字のパディングのみが印刷されます)。
したがって、すべてをまとめると、printf %100s
100個のスペースが印刷されます。
Now はtr
文字を入力から出力に変換するツールです。 2つのパラメータSET1とSET2を使用し、各パラメータは文字セットであり、SET1の最初の文字をSET2の最初の文字に変換し、SET1の2番目の文字をSET2の2番目の文字に変換する方法です。 。 。tr
stdinから入力を読み込み、stdoutに書き換えると(したがって上記のようなパイプに役立ちます)、常に指定された文字列からtr
その文字のすべての項目を変換します。
たとえば、tr aeiou 12345
小文字のコレクションは1から5までの数字に順番に翻訳されるため、「queueing」は「q52523ng」に翻訳されます。tr a-z A-Z
小文字を対応する大文字に変換するなど、文字範囲を渡すこともできます。
したがって、tr " " "="
文字列全体のスペースを等号に変換するだけです。パラメータとして認識されるには、最初のスペースを引用符で囲む必要があります。=
実際にはそうではありません必要引用されますが、そうして悪いことはありません。tr " " =
同じ効果があるでしょう。
それらを合わせて100個のスペースを印刷し、各スペースを等号に変換します。
これが十分に詳しく説明されてほしいのですが、理解できない部分があればコメントを残していただければ修正するよう努力いたします。