Bash:重复字符可变次数

时间:2018-05-01 14:08:49

标签: string bash repeat

根据以下问题和反思:

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

How can I repeat a character in bash?

我想学习如何参数化字符/字符串的重复值。例如,以下内容非常有效:

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

但是,如果我想参数化'5',请说:

num=5

我似乎无法使扩展正确以使其工作。例如:

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

失败。

任何想法/想法都会受到欢迎 - 我认为有一种方法可以做到这一点,而不必诉诸perl或awk所以只是好奇,如果可能的话。

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用seq

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

答案 1 :(得分:2)

如果您可以将命令构建为字符串 - 具有您想要的所有参数扩展 - 那么您可以对其进行评估。这将打印X num次:

num=10
eval $(echo printf '"X%0.s"' {1..$num})

答案 2 :(得分:0)

一种略有不同的方法

$ 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
   ,
   ,
   ,
   ,
   ,