gpt4 book ai didi

arrays - 在 Bash 中打印多个迭代数组,以便它们交替

转载 作者:行者123 更新时间:2023-11-29 09:47:08 25 4
gpt4 key购买 nike

我有 2 个数组,其中 artists包括音乐艺术家姓名和 songs包括歌曲名称。我想要做的是以交替方式输出每一个,这样我就可以得到 array1[1] - array2[1], array1[2] - array2[2]... ,或者:

Chelsea Wolfe - Mer
Pavement - Embassy Row
Black Math Horseman - Torment of the Metals
...

这是我现在拥有的,并提供了示例数组。实际数组是回显和处理(使用 grep)curl 命令替换的结果,所以我不确定它们是否包含双引号,但我得到的输出与此处提供的示例相同。 [编辑:这是不正确的。正如我在下面对 John1024 的评论中提到的,我使用的实际数组在每个元素后都有换行符。]

我知道这是错误的,我也知道为什么(因为我告诉 Bash “打印 artists 的所有元素,然后打印 songs 的所有元素”),我只是不知道解决方案。

artists=("Chelsea Wolfe" "Pavement" "Black Math Horseman" "Marriages" "Chelsea Wolfe")
songs=("Mer" "Embassy Row" "Torment of the Metals" "The Liar" "The Waves have Come")

IFS=$'\n'
for ((i=0;i<"${#artists[@]}";++i));
do
printf "%s\n" "${artists[@]} - ${songs[@]}"
done
[Edit: I removed the useless unassigned `OIFS` variable that was here. See my comment to glenn jackman below.]

以某种方式以我想要的交替方式组合它们,然后打印该数组是否有意义,或者是否有更简单的解决方案?

最佳答案

让我们去掉 IFS 命令并对 printf 命令做一些小改动:

artists=("Chelsea Wolfe" "Pavement" "Black Math Horseman" "Marriages" "Chelsea Wolfe")
songs=("Mer" "Embassy Row" "Torment of the Metals" "The Liar" "The Waves have Come")

for ((i=0;i<"${#artists[@]}";++i));
do
printf "%s - %s\n" "${artists[$i]}" "${songs[$i]}"
done

这会产生输出:

Chelsea Wolfe - Mer
Pavement - Embassy Row
Black Math Horseman - Torment of the Metals
Marriages - The Liar
Chelsea Wolfe - The Waves have Come

交替输出

我们可以通过将 printf 行更改为:

printf "%-20s - %s\n" "${artists[$i]}" "${songs[$i]}"

随着这个改变,输出变成:

Chelsea Wolfe        - Mer
Pavement - Embassy Row
Black Math Horseman - Torment of the Metals
Marriages - The Liar
Chelsea Wolfe - The Waves have Come

处理带有尾随换行符的数组

假设,根据评论,元素有尾随换行符:

artists=($'Chelsea Wolfe\n' $'Pavement\n' $'Black Math Horseman\n' $'Marriages\n' $'Chelsea Wolfe')
songs=($'Mer\n' $'Embassy Row\n' $'Torment of the Metals\n' $'The Liar\n' $'The Waves have Come')

我们可以使用 bash 后缀移除来移除那些换行符:

for ((i=0;i<"${#artists[@]}";++i));
do
printf "%s - %s\n" "${artists[$i]%$'\n'}" "${songs[$i]%$'\n'}"
done

输出仍然是:

Chelsea Wolfe - Mer
Pavement - Embassy Row
Black Math Horseman - Torment of the Metals
Marriages - The Liar
Chelsea Wolfe - The Waves have Come

关于arrays - 在 Bash 中打印多个迭代数组,以便它们交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com