如何使用Bash脚本将两个数组并排打印?

9

在谷歌和stackoverflow上,我都没有找到一个好的简单回答这个问题的方法。

基本上,我有两个数组,我需要将它们并排打印到终端上,因为其中一个数组是术语列表,另一个数组是术语定义。 有人知道一个好的方法吗?

先行致谢。


使用关联数组? - jordanm
2个回答

13

这是一个“一行代码”:

paste <(printf "%s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}")

这将创建由一个术语和一个定义组成的行,中间用制表符分隔,严格来说可能不是“并排”的(因为它们实际上不在列中)。如果您知道第一列应该有多宽,可以使用类似以下的内容:
paste -d' ' <(printf "%-12.12s\n" "${terms[@]}") <(printf "%s\n" "${defs[@]}")

这将把术语补齐或缩短到 12 个字符,然后在两列之间加入空格而不是制表符 (-d' ')。


对于在 POSIX 模式下使用 shell 的人:https://unix.stackexchange.com/questions/151911/syntax-error-near-unexpected-token - Herpes Free Engineer
纯Bash方式:https://dev59.com/UY_ea4cB1Zd3GeqPT918#32998279 - Herpes Free Engineer

9

假定两个数组长度相同,您可以使用C风格的for循环来完成此操作:

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

通过数组索引进行循环不是更容易吗?像这样:i in "${!arr1[@]}" - oguz ismail
@oguzismail 是的,它可以更好地处理稀疏数组。 - jordanm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接