私のBashスクリプトはprintf
、次の方法で、フォーマットが適用された他のコマンドの出力を出力するために使用します(先頭の2つのスペースに注意してください):
printf " %-16s %s\n" "foo:" "$(bar)"
ファイルの最初の行はコメントであるため、先頭の 2 つのスペースがあります。
# foo
foo: bar
foo: bar
...
これは、出力が 1 行のコマンドでは問題なく機能します。ただし、出力が複数行の場合、出力は後続の行の書式設定を失います。
例えば:
printf " %-16s %s\n" "Contents:" "$(ls -a)"
結果は次のようになります。
Contents: .
..
foo
bar
代わりに、私が達成しようとしているのは、各行が(必要に応じて列に)フォーマットされた複数行の出力であり、次のようになります(後続の行に「ヘッダー」がないことに注意してください):
Contents: .
..
foo
bar
これまでの私の理解ではprintf
、2 つの引数 (最初の引数は文字列で、もう 1 つは指定されたコマンドの結果) では、2 番目の引数を単一の文字列として扱い、その中に改行文字を含めることができます。したがって、出力は実際には、私が要求printf
したとおりに正しくフォーマットされていますが、探しているものではありません。
のようなコマンドの出力の解析に関連するいくつかの落とし穴があることを認識しており、ls
この問題を解決する現在の可能性を使い果たしています。また、これprintf
を行うのに最適な機能ではない可能性があります。
この問題を解決できない場合は、複数行の文字列をカンマ区切りのリストに置き換えることを検討していますが、これは最後の手段です。
必要なフォーマットを実現するための最良の方法は何ですか?
ご協力いただきありがとうございます。