【问题标题】:How to duplicate string in bash?如何在bash中复制字符串?
【发布时间】:2019-07-01 22:47:48
【问题描述】:

我在 bash 中有以下字符串

str="kallel"

我想从strstr2 创建。 str2 包含 str 重复直到长度 = 20。所以结果应该是这样的:

str2="kallelkallelkallelka"

在 bash 中怎么做?

【问题讨论】:

    标签: linux string bash shell


    【解决方案1】:
    $ str="kallel"
    
    $ str2=$(printf "$str%.0s" {1..20})
    $ echo "$str2"
    kallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallelkallel
    
    $ str2=$(printf "$str%.0s" {1..3})
    $ echo "$str2"
    kallelkallelkallel
    
    $ n=5
    $ str2=$(printf "$str%.0s" $(seq "$n"))
    $ echo "$str2"
    kallelkallelkallelkallelkallel
    

    【讨论】:

    • 必须说我喜欢 printf 的这种用法。花了一些时间,但现在我看到 printf 将为传递给它的每个参数重复它的格式字符串(如果参数多于可替换的 % 参数)。 %.0s 吃掉一个参数,但将其作为 0 长度添加到输出中。尽管有点晦涩难懂,但我认为它是一个比yes更好的解决方案|头| xargs | sed |我提出的剪辑。
    【解决方案2】:

    这应该可行:

    str="kallel"
    str2="${str}"
    while (( ${#str2} < 20 ))
    do
      str2="${str2}${str}"
    done
    str2="${str2:0:20}"
    

    【讨论】:

    • 第 2 行 (str2="${str}") 是多余的。
    • @devnull 怎么样?它在循环之前将一个变量 (${str}) 的值分配为第二个变量 (str2) 的初始值...它将循环计数减少一并覆盖之前的任何值 str2 可能有有,避免明确的str2=""...
    • str2 未分配,因此长度为零。试试echo ${#foo}
    • @devnull 它可能未分配,但我不确定这是否是更大脚本的一部分。最好是安全的。
    【解决方案3】:

    我会亲自进行一段时间循环,然后在最后将其剪切。

    str2 的长度小于20 时,将str 添加到str2。 然后,为了更好地衡量,我们在结尾处减少到最多 20 个字符。

    #!/bin/bash
    str="kallel"
    str2=""
    while [ ${#str2} -le 20 ]
    do
        str2=$str2$str
    done
    str2=`echo $str2 | cut -c1-20`
    

    【讨论】:

    • 这一行有错误while [ ${#stringZ} -le 20]line 35: [: missing ]'`
    • 20 之后和] 之前应该有一个空格。固定。
    • 已屏蔽。看起来像无限循环。
    • 计算$stringZ的长度总是会返回相同的数字,因为循环只修改$str2而不是$stringZ...
    • 对不起,伙计们 - 只是把它放在一起而不检查。现在应该可以工作了
    【解决方案4】:

    我 100% 窃取了 Bash : Duplicate a string variable n times 的这个答案,但我认为它很无聊(尽管是一个 6 岁的问题):

    $ yes "kallel" | head -20  | xargs | sed 's/ //g' | cut -c1-20
    kallelkallelkallelka
    

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 2014-02-19
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多