所以基本上我希望能够打印出两个单独的数组,每个元素之间都有换行符。
我正在寻找的样本输出:
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