У вас есть классическая проблема наличия меньшего числа спецификаторов формата, чем фактических аргументов для случая
printf "%0.s../" 1 2
Bash применяет правила спецификатора один к одному с аргументами, но в случае неправильного соответствия правила спецификатора в основном копируются, как если бы он выполнялся как
printf "%0.s../../" 1
. Вам необходимо добавить дополнительный спецификатор для 2 как
printf "%0.s..%0.s/" 1 2
, в которомВ случае, если вы просто получаете один ../
вывод при совпадении правил форматирования.
Что касается синтаксиса %0.s
, кажется, что он усекает строку аргумента, как вы заметили.Единственная проблема с вашей логикой - неправильные спецификаторы, как описано выше.Поле ширины имеет больше смысла при печати длинных значений в оболочке, в которой точность с определяется полями ширины.Например,
printf '%4.2f\n' 1323.343233
1323.34
, который printf()
понимает, поскольку у вас есть число, состоящее из 4 цифр, предшествующих точке, и прецизионных цифр максимум 2.
Вам не нужно echo
вывод printf()
на первое место.Вы можете использовать спецификатор формата \n
в конце для печати новой строки.
printf "%0.s..%0.s/\n" 1 2