8

无论是在谷歌还是在stackoverflow上,我都找不到这个问题的好而简单的答案。

基本上我有两个数组需要并排打印到终端,因为一个数组是术语列表,另一个是术语的定义。有谁知道这样做的好方法?

提前致谢。

4

2 回答 2

12

这是一个“单行”:

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

这将创建由一个选项卡分隔的术语和定义组成的行,严格来说,这可能不是“并排”的(因为它们实际上并不在列中)。如果您知道第一列应该有多宽,您可以使用以下内容:

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

这会将术语完全填充或截断为 12 个字符,然后在两列之间放置一个空格而不是制表符 ( -d' ')。

于 2013-05-13T01:28:02.803 回答
9

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

for ((i=0; i<=${#arr1[@]}; i++)); do
    printf '%s %s\n' "${arr1[i]}" "${arr2[i]}"
done
于 2013-05-12T18:32:42.397 回答