команда printf в bash

printf "%50s\n" " I ate 4 eggs" 

В этом примере я хочу назначить 50 из переменной. И как я могу использовать переменную для цикла в Bash?

Любая идея?

    2 Solutions collect form web for “команда printf в bash”

    По крайней мере, с помощью bash вы можете передать переменную ширину поля, используя модификатор преобразования printf * стиле C:

     width=50 printf '%*s\n' $width "I ate 4 eggs" I ate 4 eggs 

    Смотрите man 3 printf для подробностей.

    Как использовать его в цикле for, будет зависеть от того, какой результат вы хотите получить.


    Исходя из вашего комментария, вы можете использовать

     for i in {45..50}; do for j in {1..13}; do printf '%*.*s\n' $i $j "I ate 4 eggs" done done 

    предоставить ширину и точность поля как переменные, в результате чего

      I I I a I at I ate I ate I ate 4 I ate 4 I ate 4 e I ate 4 eg I ate 4 egg I ate 4 eggs I ate 4 eggs I I I a I at I ate I ate I ate 4 I ate 4 I ate 4 e I ate 4 eg I ate 4 egg I ate 4 eggs I ate 4 eggs 

    и так далее.

    Вы можете назначить 50 переменной следующим образом:

     variable=50 

    Вы можете использовать эту переменную в цикле for следующим образом:

     for i in foo bar baz; do printf "%${variable}s\n" "I ate 4 eggs" done 

    В случае, если вы пытаетесь увеличить отступ в своем выражении printf, вы можете сделать что-то вроде этого:

     $ for i in {45..50}; do printf "%${i}s\n" "I ate 4 eggs"; done I ate 4 eggs I ate 4 eggs I ate 4 eggs I ate 4 eggs I ate 4 eggs I ate 4 eggs 
    Linux и Unix - лучшая ОС в мире.