Bash shell编程回声没有跳转到下一行

时间:2016-06-08 06:32:51

标签: bash shell

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

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

使用-n标志。

示例:

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

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

答案 2 :(得分:0)

41250之后的换行实际上来自bc,而不是回声。

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

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

现在你应该可以解决它了:)