Unixのprintfは期待通りに文字列をフォーマットしません。代わりにフォーマット文字列を出力します。

Unixのprintfは期待通りに文字列をフォーマットしません。代わりにフォーマット文字列を出力します。

次のコマンドを使用して、いくつかの ENV 変数を .txt ファイルに書き込みますprintf(env 変数が設定されていないため空の行は無視します)。

printf '%-79s' "${foo1}${bar1}" | grep -v '^\s\{79\}' >> foobar.txt
printf '%-79s' "${foo2}${bar2}" | grep -v '^\s\{79\}' >> foobar.txt
...

私のローカル WSL および Docker 環境 (centos 7) では、期待どおりに動作します。ただし、スクリプトを実行するサーバーでは、79sfoobar.txt ファイルにのみ出力されます。

cat foobar.txt
79s
79s

printfコマンドが期待どおりに動作しない理由について、誰か考えがありますか?

他の解決策を自由に提案してください。ただし、コマンドがリモート サーバーで期待どおりに動作しない理由にも非常に興味があります。

関連情報