Выровняйте по левому краю с printf в bash с неизвестной шириной - PullRequest
2 голосов
/ 31 марта 2020

Я пытаюсь выровнять по левому краю с printf в bash с неизвестной шириной.

Как мне это сделать?

Так вроде как, но это не работает

max=<enter random number>
printf "%-${max}s|", "Instance"

Дело в том, что нижеприведенный пример будет иметь неизвестную длину, которая может иметь длину c.

Пример ввода

max=10

Пример вывода

Instance  |

Пример Input2

max=12

Пример Output2

Instance    |

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Вы можете использовать * для длины:

for ((max=8;max<15;max++)); do
    printf "%-*s|\n" ${max} "Instance"
done

Результат:

Instance|
Instance |
Instance  |
Instance   |
Instance    |
Instance     |
Instance      |
2 голосов
/ 01 апреля 2020

Полагаю, вы пытаетесь напечатать таблицу. Я думаю, что вы не сможете сделать это с одним printf. В основном это потребует от вашей команды вывода строки для прогнозирования будущих выходных данных.

Если вы можете допустить постобработку, вы можете просто сделать это с помощью команды column. Просто выберите символ, который вы хотите заменить на отступы, и сделайте, как в следующем примере (я выбрал backsla sh \):

printf "%s\\|\n" "Instance" "Linstance" "Mintinginstance" | column -ts'\'

Вывод:

Instance         |
Linstance        |
Mintinginstance  |
...