【发布时间】:2015-11-08 02:37:57
【问题描述】:
我有 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.]
以某种方式以我想要的交替方式组合它们是否有意义,然后打印该数组,还是有更简单的解决方案?
【问题讨论】:
-
注意:您从不分配变量
OIFS,因此您将IFS分配给脚本末尾的空字符串(如果这只是一个 sn-p,这可能很重要) -
是的,脚本100行左右,这只是一部分。我认为你是对的,我确实忘记分配
OIFS。我已经修改了脚本以包含您的建议,因此IFS和OIFS已被完全删除。