Bash: повторять символ разное количество раз - PullRequest
0 голосов
/ 01 мая 2018

За вопросы и размышления в:

https://unix.stackexchange.com/questions/188658/writing-a-character-n-times-using-the-printf-command

и

Как мне повторить символ в bash?

Я хотел бы узнать, как можно параметризировать значение повторения для символа / строки. Например, работает следующее:

printf "   ,\n%0.s" {1..5}

Однако, если я хочу параметризировать '5', скажите:

num=5

Кажется, я не могу правильно понять расширение, чтобы сделать эту работу. Например:

printf "   ,\n%0.s" {1..$((num))}

выходит из строя.

Любые мысли / идеи будут приветствоваться - я считаю, что есть способ сделать это, не прибегая к perl или awk, поэтому просто любопытно, если это возможно.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Если вы можете построить команду как строку - со всеми необходимыми расширениями параметров - тогда вы можете оценить ее. Это печатает X num раз:

num=10
eval $(echo printf '"X%0.s"' {1..$num})
0 голосов
/ 01 мая 2018

Немного другой подход

$ repeat() {
    local str=$1 n=$2 spaces
    printf -v spaces "%*s" $n " "     # create a string of spaces $n chars long
    printf "%s" "${spaces// /$str}"   # substitute each space with the requested string
}
$ repeat '!' 10
!!!!!!!!!!                     # <= no newline
$ repeat $'   ,\n' 5
   ,
   ,
   ,
   ,
   ,
0 голосов
/ 01 мая 2018

Вы можете использовать seq

num=20;
printf '\n%.0s' $(seq $num)
...