合并换行符分隔的字符串

时间:2017-05-10 20:45:19

标签: sh posix

我们说我有两个变量 foo bar 包含相同数量的换行符分隔字符串,例如

$ echo $foo
a
b
c
$ echo $bar
x
y
z

合并 foo bar 以获取下方输出的最简单方法是什么?

a x
b y
c z

如果 foo bar 是文件,我可以paste -d ' ' foo bar,但在这种情况下,它们是字符串。

1 个答案:

答案 0 :(得分:0)

您可以在Bash中使用进程替换来执行此操作(不符合POSIX):

foo=$'a\nb\nc'
bar=$'x\ny\nz'
paste -d ' ' <(printf '%s\n' "$foo") <(printf '%s\n' "$bar")

输出:

a x
b y
c z

符合sh标准的方式似乎有点令人费解:

foo=$'a\nb\nc'
bar=$'x\ny\nz'
res=$(while IFS=$'\n' read -u 3 -r f1 && IFS=$'\n' read -u 4 -r f2; do
  printf '%s' "$f1"
  printf ' %s\n' "$f2"
done 3<<<"$foo" 4<<<"$bar"
)