【问题标题】:Bash shell programming echo without jumping to next line [duplicate]Bash shell编程回显而不跳转到下一行[重复]
【发布时间】:2016-10-08 06:30:19
【问题描述】:
#!/bin/bash
echo "Enter process name"
read process
if pgrep "$process" > /dev/null
then
    echo 0 $(awk '/Rss/ {print "+", $2}' /proc/`pidof $process`/smaps) | bc;
    echo "Kb"
else
    echo "Process $process not running"
fi

上面代码的输出是

41250 
Kb

我需要在同一行输出“Kb”作为这样的数字

41250  Kb

【问题讨论】:

  • echo -n "text" - 可以吗?
  • 你用 printf 试过 printf 吗?

标签: bash shell


【解决方案1】:

使用-n 标志。

例子:

echo -n 'I do not want a new line,'
echo ' because there is something else here.'

使用$ man echo 获取更多信息。

【讨论】:

    【解决方案2】:

    41250 后面的换行符实际上是来自bc,而不是 echo。

    在变量中捕获 bc 的输出会删除尾随换行符 (ref)。

    #!/bin/bash
    kbCount=$( echo "1+2" | bc)
    echo $kbCount "Kb"
    

    现在你应该可以修复它了 :)

    【讨论】:

    • 谢谢,这个也有用
    【解决方案3】:

    您可以使用echo -n 输出数据而无需尾随换行符,但对于这种特殊情况,awk 完全能够自行进行算术和格式化,而无需涉及bc 或不必要的子过程:

    awk '/Rss/ {sum += $2} END {print sum" Kb"}' /proc/`pidof $process`/smaps
    

    您可以在以下记录中看到,将Rss 两个数字7511 相加得到86

    pax> printf Rss 75\nCss 22\nRss 11\n' | awk '/Rss/ {sum += $2} END {print sum" Kb"}'
    86 Kb
    

    【讨论】:

    • 感谢它完美运行
    猜你喜欢
    • 2012-01-03
    • 2020-07-05
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多