【问题标题】:Multiplying strings in bash script在bash脚本中乘以字符串
【发布时间】:2016-12-16 13:23:19
【问题描述】:

我知道如果我在 python 中执行print ("f" + 2 * "o"),输出将是foo

但是我如何在 bash 脚本中做同样的事情呢?

【问题讨论】:

    标签: string bash concatenation


    【解决方案1】:

    您可以使用 bash command substitution 比使用特定于变体的命令更便于跨系统移植。

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

    将其封装在一个更有用的 shell 函数中

    repeatChar() {
        local input="$1"
        local count="$2"
        printf -v myString "%s" "%${count}s"
        printf '%s\n' "${myString// /$input}"
    }
    
    $ repeatChar str 10
    strstrstrstrstrstrstrstrstrstr
    

    【讨论】:

    • 使用printf -v myString '%*s' "$count" 而不是myString=$(...)。并使用local 将变量标记为本地(或删除本地变量并直接使用参数)。
    • @gniourf_gniourf:是的,这是一个很老的答案。无论如何都会做出改变!
    • 您可以简化为$ ${$(printf %10s)// /rep}
    【解决方案2】:

    这样就可以了:

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

    查看here 以了解“乘法”部分的说明。

    【讨论】:

      【解决方案3】:

      在 bash 中,您可以以类似的方式使用简单的字符串索引

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

      输出

      foo
      

      另一种方法只是将字符连接成一个字符串

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

      输出

      foo
      

      还有其他几个可以使用。

      【讨论】:

        【解决方案4】:

        你可以简单地使用循环

        $ for i in {1..4}; do echo -n 'm'; done
        mmmm
        

        【讨论】:

          【解决方案5】:

          您可以创建一个函数来循环一个字符串以获得特定计数,并在 您正在以动态长度执行的循环。 仅供参考不同版本的其他答案。

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

          打印:################

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-02-07
            • 1970-01-01
            • 2013-11-16
            • 1970-01-01
            • 1970-01-01
            • 2011-12-19
            • 2011-07-10
            • 2015-09-04
            相关资源
            最近更新 更多