如何在 bash 的并排列中打​​印多行变量?

BNa*_*irb 14 command-line bash text-processing

我有两个包含多行信息的变量,我想将它们列起来。

varA 返回

Aug 01
Aug 04
Aug 16
Aug 26
Run Code Online (Sandbox Code Playgroud)

varB返回

04:25
07:28
03:39
10:06
Run Code Online (Sandbox Code Playgroud)

如果我打印两个变量,它返回

Aug01
Aug04
Aug16
Aug26
04:25
07:28
03:39
10:06
Run Code Online (Sandbox Code Playgroud)

我想要做的是以下内容:

Aug01 04:25
Aug04 07:28
Aug16 03:39
Aug26 10:06
Run Code Online (Sandbox Code Playgroud)

我是使用 Linux 的新手,希望得到一些建议。

des*_*ert 23

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
Run Code Online (Sandbox Code Playgroud)

paste将文件而不是变量作为输入,所以我使用了bashProcess Substitution并且只用printf. 列之间的默认分隔符是TAB,您可以使用-d选项更改它,例如paste -d" "单个空格字符。要了解更多信息,请paste查看在线手册或运行info '(coreutils) paste invocation'


Jos*_*tte 8

如果您只想简单地并排显示文本变量,@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"
Run Code Online (Sandbox Code Playgroud)