Multiplying strings in bash script

前端 未结 5 2146
伪装坚强ぢ
伪装坚强ぢ 2020-12-16 20:59

I know that if I do print (\"f\" + 2 * \"o\") in python the output will be foo.

But how do I do the same thing in a bash script?

相关标签:
5条回答
  • 2020-12-16 21:14

    You can create a function to loop a string for a specific count and use it in the loop you are executing with dynamic length. FYI a different version of oter answers.

      line_break()
        {
            for i in `seq 0 ${count}`
            do
              echo -n "########################"
            done
        }
    
        line_break 10
    

    prints: ################

    0 讨论(0)
  • 2020-12-16 21:20

    You could simply use loop

    $ for i in {1..4}; do echo -n 'm'; done
    mmmm
    
    0 讨论(0)
  • 2020-12-16 21:24

    That will do:

    printf 'f'; printf 'o%.0s' {1..2}; echo
    

    Look here for explanations on the "multiplying" part.

    0 讨论(0)
  • 2020-12-16 21:28

    In bash you can use simple string indexing in a similar manner

    #!/bin/bash
    oos="oooooooooooooo"
    n=2
    printf "%c%s\n" 'f' ${oos:0:n}
    

    output

    foo
    

    Another approach simply concatenates characters into a string

    #!/bin/bash
    n=2
    chr=o
    str=
    for ((i = 0; i < n; i++)); do 
        str="$str$chr"
    done
    printf "f%s\n" "$str"
    

    Output

    foo
    

    There are several more that can be used as well.

    0 讨论(0)
  • 2020-12-16 21:39

    You can use bash command substitution to be more portable across systems than to use a variant specific command.

    $ myString=$(printf "%10s");echo ${myString// /m}           # echoes 'm' 10 times
    mmmmmmmmmm
    
    $ myString=$(printf "%10s");echo ${myString// /rep}         # echoes 'rep' 10 times
    reprepreprepreprepreprepreprep
    

    Wrapping it up in a more usable shell-function

    repeatChar() {
        local input="$1"
        local count="$2"
        printf -v myString "%s" "%${count}s"
        printf '%s\n' "${myString// /$input}"
    }
    
    $ repeatChar str 10
    strstrstrstrstrstrstrstrstrstr
    
    0 讨论(0)
提交回复
热议问题