如何在Bash中逐列组合两个变量

14

我有两个变量,分别为多行。

VAR1="1
2
3
4"

VAR2="ao
ad
af
ae"

我想得到

VAR3="1ao
2ad
3af
4ae"

我知道我可以这样做:

echo "$VAR1" > /tmp/order
echo "$VAR2" | paste /tmp/order  -

但是有没有不使用临时文件的方法呢?

2个回答

30

将变量 $VAR1 和 $VAR2 的值作为输入,使用空字符串作为分隔符,并将它们粘贴在一起。


1
<() 运算符叫什么? - Kurtis Nusbaum
2
@KurtisNusbaum "<()"被称为“进程替换”。并非所有Shell都支持它,但大多数流行的Shell都支持:https://www.google.com/search?q=process+substitution - dgo.a
在我的Linux (Ubuntu 18.04.1 LTS)上这个无法工作。粘贴的那一行出现了以下错误: script.sh: 11: script.sh:语法错误:"("不是预期的。 - msimmer92
2
在OSX上,我不得不执行paste --d '' <(echo "$VAR1") <(echo "$VAR2")。使用--delimiters参数或将其放在命令的末尾会导致出现“没有这样的文件或目录”的错误。 - iamyojimbo
我在 macOS 上遇到了与 @iamyojimbo 相同的问题,使用 --d 命令会提示 paste: illegal option -- - usage: paste [-s] [-d delimiters] file ...。使用 -d 命令解决了这个问题。 - Henrique Mattos

4
你可以这样说:
$ VAR3=$(paste <(echo "$VAR1") <(echo "$VAR2"))
$ echo "$VAR3"
1   ao
2   ad
3   af
4   ae

不清楚您是否希望在结果数组中包含空格。您的示例运行良好将像上面的情况一样包含空格。

如果您不想要空格,即想要1ao而不是1 ao,那么可以这样写:

$ VAR3=$(paste <(echo "$VAR1") <(echo "$VAR2") -d '')
$ echo "$VAR3"
1ao
2ad
3af
4ae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接