【问题标题】:Print output in vertical format for bash with echo使用 echo 以垂直格式打印输出以用于 bash
【发布时间】:2020-06-11 03:52:14
【问题描述】:

我定义了 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 操作系统

粘贴

【问题讨论】:

  • 我不明白命令ps -ef | grep java 怎么可能只导致java1 java2 java3 java4....

标签: bash shell unix scripting solaris


【解决方案1】:

怎么样

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

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

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

【讨论】:

    【解决方案2】:

    在进程替换中使用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))
    

    【讨论】:

    • 谢谢,我在将命令输出导出到文件后使用粘贴,因为使用命令直接执行不起作用。我试过类似echo $a &gt; a.txt echo $b &gt; b.txt echo $c &gt; c.txt cat a.txt | tr " " "\n" &gt; d cat b.txt | tr " " "\n" &gt; e cat c.txt | tr " " "\n" &gt; f paste d e f
    【解决方案3】:

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

    #!/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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多