【问题标题】:How to append to each line of a variable another variable in bash?如何在bash中将另一个变量附加到变量的每一行?
【发布时间】:2021-02-15 07:22:06
【问题描述】:

我有一个名为 concat 的变量(两个变量之间粘贴命令的结果)。 concat 是一个包含字符串的多行变量:

strawberrie red
banana yellow
apple green

排版结果 -p concat :

declare --concat ="strawberrie    red
banana    yellow
apple     green"

我需要在这个变量的每一行的开头附加另一个名为 type 的变量:

fruit

回显变量数组后我需要得到的结果(编辑:它不是数组,但我这样称呼它)

fruit strawberrie red
fruit banana yellow
fruit apple green

我尝试使用 sed,但没有成功:

echo "$concat" | sed "/^/$type"

返回的错误是找不到 sed 命令(即使 sed 工作)

array=$(sed '/^/$type')

只是不工作

我在互联网上找到了许多其他解决方案,但没有一个对我有用(我不知道如何正确使用 sed,所以我想我可能写了不适应的选项)。

我需要使用哪个命令来做到这一点(你能解释一下你在其中使用的选项,这样我就不会在没有学习的情况下粘贴它)?

编辑:这是我用来将变量fruit附加到变量concat并保存在变量数组中的代码(也是一个字符串):

array=$(sed "s/^/$type /g" <<< "$concat")

【问题讨论】:

  • 根据您的描述,(对我来说)${concat} 是具有多行值的变量还是多条目数组尚不清楚;请使用typeset -p concat 的输出更新问题
  • 你的 sed 没问题,你只是忘记了命令 s: echo "$concat" | sed "s/^/$type /" 应该可以工作。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: bash variables sed append


【解决方案1】:

Awk 是一个选项:

awk -v var="fruit" '{ print var" "$0 }' <<< "$varble"

使用变量 - varble 中的示例数据,将变量重定向回 awk,传递一个包含要打印的前缀文本的变量 (var)。然后打印变量 var 以及重定向变量 varble 的每一行。

【讨论】:

    【解决方案2】:

    假设:

    • concat 是一个包含多行数据集的变量
    • OP 希望在concat 的每一行前面加上"${type}",然后将每一行作为一个单独的条目存储为一个名为array 的数组

    我们的数据:

    $ concat="strawberrie red
    banana yellow
    apple green"
    

    在每一行前加上type=fruit +(空格):

    $ type=fruit
    $ sed "s/^/${type} /g" <<< "${concat}"
    fruit strawberrie red
    fruit banana yellow
    fruit apple green
    

    将结果存储在数组array:

    $ IFS=$'\n' read -d '' -r -a array < <(sed "s/^/${type} /g" <<< "${concat}")
    $ typeset -p array
    declare -a array=([0]="fruit strawberrie red" [1]="fruit banana yellow" [2]="fruit apple green")
    $ for i in "${!array[@]}"
    do
        echo "${i} - ${array[${i}]}"
    done
    
    0 - fruit strawberrie red
    1 - fruit banana yellow
    2 - fruit apple green
    

    【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多