Насколько вы доверяете своим данным?Вы можете позволить анализатору команд убрать лишние пробелы ценой некоторого риска.
$: full_string=$'a\nb\nc\nd'
$: printf %-15s $full_string $'\n'
a b c d
Если ваши данные находятся в файле ...
$: r=( $(<file) )
$: printf %-15s "${r[@]}" $'\n'
a b c d
или даже
$: printf %-15s $(<file) $'\n'
a b c d
Что вы можете не увидеть, так это то, что символ новой строки был также напечатан в поле шириной 15, поэтому в конце строки много пробелов.
Обратите внимание, что эти повторные символы используются повторно.форматирование строки (это было достаточно просто, я не цитировал, но вы, как правило, должны).
Размещение кавычек в неправильных местах может вызвать проблемы ...
$: printf %-15s "$(<file)" $'\n'
a
b
c
d
Вы получите тот же результат от
$: printf %-15s "$full_string" $'\n'
Как правило, вы хочу цитаты, но полезные вещи можно сделать, творчески опуская их и позволяя анализатору манипулировать пробелами.Просто знайте, что вы получаете.если в одном из этих полей есть встроенный пробел, все ставки отключены.
Почти тот же набор предостережений применяется к самому формату.
$: f="%-15s %5s"
$: printf $f $x $'\n' # oops!
%5s a b c d
$: printf "$f" $x $'\n'
a bc d
Таким образом, вы можете динамически создавать разные форматы, еслиВы хотите, и просто заключите переменную в двойные кавычки, чтобы она анализировалась «правильно».Как всегда, проверьте это.