printf 引用文字列

printf 引用文字列

Bashでテーブルを作成しようとしています。すべてのヘッダーをvarに収集しました。ただし、「に含まれるこれらの文字列を印刷すると、その文字列はprintfコマンドが列に実行する操作の代わりに新しい列として扱われます。

同じ値を直接渡すと正常に動作しますが、$ varを使用すると他の動作が発生します。

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values'
$ echo $values
"some spaced words" other values
$ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

私は明らかに私の変数がどう違うのかを誤解し、< some string >他の行動をもたらしました。

変数を使用するときに出力1に一致する出力を取得するにはどうすればよいですか?

編集:varバージョンに引用符があることがわかります。引用符付き文字列をprintfに変数として渡す方法はありますか?

答え1

変数は拡大するシェルがコマンドを実行する前、つまりprintfここでは変数拡張後にトークン化が発生します。スカラー変数の代わりに配列を使用してください。

values=('some spaced words' other values)
printf %-20s "${values[@]}"

関連情報