如何在 bash 脚本中用新行打印出 2 个单独的数组
所以基本上我希望能够打印出两个单独的数组,每个元素之间有换行符。
我正在寻找的示例输出:
a x
b y
(a,b是一个数组x的一部分,y是一个单独的数组)
当前我使用:
printf "%s\n" "${words[@]} ${newWords[@]}"
但输出结果如下:
a
b x
y
So basically I want to be able to print out 2 separate arrays with newlines between each element.
Sample output I'm looking for:
a x
b y
(a,b being apart of one array x,y being a separate array)
Currently im using:
printf "%s\n" "${words[@]} ${newWords[@]}"
But the output comes out like:
a
b x
y
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于
bash
已标记,您可以使用 GNU coreutils 中的paste
将每个数组作为输入:TAB 是默认的列分隔符,但您可以使用选项
- 更改它d。
如果您的数组项可能包含换行符,则可以使用
-z
标志切换到例如NUL
分隔的字符串,并使用printf '% 生成每个输入s\0'
。As
bash
is tagged, you could usepaste
from GNU coreutils with each array as an input:TAB is the default column separator but you can change it with option
-d
.If you have array items that might contain newlines, you can switch to e.g.
NUL
-delimited strings by using the-z
flag and producing each input usingprintf '%s\0'
."${words[@]} ${newWords[@]}"
会产生什么?让我们将该扩展放入另一个数组中,看看它里面有什么:因此,第一个数组的最后一个元素和第二个数组的第一个元素作为字符串连接起来;其他元素仍然是单独的。
使用 2 个进程替换的
paste
是解决此问题的好方法。如果您想在普通 bash 中执行此操作,请迭代数组的索引:What does
"${words[@]} ${newWords[@]}"
produce? Let's put that expansion into another array and see what's inside it:So, the last element of the first array and the first element of the second array are joined as a string; the other elements remain individual.
paste
with 2 process substitutions is a good way to solve this. If you want to do it in plain bash, iterate over the indices of the arrays: