使用 echo 以垂直格式打印 bash 的输出

Print output in vertical format for bash with echo

我定义了 3 个变量并使用 echo 显示输出。但是输出显示为单行,预期的输出是并排的。

a=$(ps -ef | grep java) 
b=$(ps -ef | grep http)  
c=$(ps -ef | grep php)
echo $a $b $c

输出:

java1 java2 java3 java4 http1 http2 http3 http4 php1 php2 php3 php4

预期输出

 java1 http1 php1
 java2 http2 php2 
 java3 http3 php3  
 java4 http4 php4

也使用了下面的粘贴,但那也很管用。使用 solaris OS

paste <(echo $a) <(echo $b) <(echo $c)

这样的事情可能会有所帮助

#!/bin/bash

a='java1 java2 java3 java4'
b='http1 http2 http3 http4'
c='php1  php2  php3  php4'
a=($a)
b=($b)
c=($c)

for i in ${!a[@]}; {
    echo ${a[$i]} ${b[$i]} ${c[$i]}
}

用法

$ ./test 
java1 http1 php1
java2 http2 php2
java3 http3 php3
java4 http4 php4

在进程替换中使用 paste 你可以这样做:

paste <(pgrep java) <(paste <(pgrep http) <(pgrep php))

ps -ef 在大多数 Unix 版本上提供多列输出,而不仅仅是单列输出。

使用 ps -ef 你可以这样做:

paste <(ps -ef | grep -o java) <(paste <(ps -ef | grep -o http) <(ps -ef | grep -o php))

怎么样

for s in $a $b $c
do
    echo $s
done

如果你以后不需要变量,我会简单地写

for w in java http php
do
    ps -ef | grep -F -- "$w"
done