Answers:
Meet paste
,是预安装的GNU核心实用程序的一部分:
$ paste <(printf %s "$varA") <(printf %s "$varB")
Aug 01 04:25
Aug 04 07:28
Aug 16 03:39
Aug 26 10:06
paste
将文件而不是变量作为输入,因此我使用了bash
Process Substitution并仅使用来打印变量内容printf
。列之间的默认定界符是TAB
,您可以使用-d
选项更改该定界符,例如paste -d" "
单个空格字符。要了解更多信息,请paste
查看在线手册或运行info '(coreutils) paste invocation'
。
如果您只是想简单地并排显示文本变量,则@dessert具有使用的最简单(最佳?)解决方案print
。但是,如果您希望能够分别操作每个片段,则可以轻松地将vars转换为数组,然后循环遍历。
#!/bin/bash
# declare the multi-line variables
var1="1
2
3
4"
var2="a
b
c
d"
# backup internal field separator to be safe
IFSave=$IFS
# set IFS to newline so vars will use newline to split into array
IFS=$'\n'
# split variables into array
foo=($var1)
bar=($var2)
#restore IFS to original value to be safe
IFS=$IFSave
# loop array foo, and cross reference key in array bar
for i in "${!foo[@]}"; do
printf "${foo[$i]} : ${bar[$i]}\n"
done
# you can allso now print single corresponding lines:
line=3
let id=$line-1 # arrays start at 0, so need to remove one
printf "\nPrinting line number $line\n"
printf "${foo[$id]} : ${bar[$id]}\n"
您可以使用POSIX工具执行此操作pr
:
varA='Aug 01
Aug 04
Aug 16
Aug 26'
varB='04:25
07:28
03:39
10:06'
pr -2 -t <<eof
$varA
$varB
eof
结果:
Aug 01 04:25
Aug 04 07:28
Aug 16 03:39
Aug 26 10:06
或对于单个选项卡:
pr -2 -t -s
或用于单个空格:
pr -2 -t -s' '
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pr.html
或column
从util-linux
包:
column -c 20 <<eof
$varA
$varB
eof