如何在bash脚本中用新行打印出两个单独的数组



所以基本上我希望能够打印出两个单独的数组,每个元素之间都有换行符。

我正在寻找的样本输出:

a         x
b         y

(a,b是一个阵列x的一部分,y是单独的阵列(

目前正在使用:

printf "%sn" "${words[@]}        ${newWords[@]}"

但结果是:

a
b         x
y

bash被标记时,您可以使用GNU coreutils中的paste,并将每个数组作为输入:

$ words=(a b)
$ newWords=(x y)
$ paste <(printf '%sn' "${words[@]}") <(printf '%sn' "${newWords[@]}")
a   x
b   y

TAB是默认的列分隔符,但可以使用选项-d进行更改。

如果您有可能包含换行符的数组项,则可以通过使用-z标志并使用printf '%s'生成每个输入来切换到例如NUL分隔的字符串。

"${words[@]} ${newWords[@]}"产生什么?让我们把这个扩展放到另一个数组中,看看里面有什么:

words=(a b)
newWords=(x y)
tmp=("${words[@]}        ${newWords[@]}")
declare -p tmp
declare -a tmp=([0]="a" [1]="b        x" [2]="y")

因此,第一阵列的最后一个元素和第二阵列的第一个元素被连接为字符串;其他元素保持独立。


paste具有2个过程替换是解决这一问题的好方法。如果您想在普通bash中进行,请迭代数组的索引

for idx in "${!words[@]}"; do
printf '%st%sn' "${words[idx]}" "${newWords[idx]}"
done

相关内容

  • 没有找到相关文章

最新更新