bash echo用escape charackter替换字符

时间:2018-06-03 10:34:07

标签: bash ps

我正在尝试自己创建top命令。我坚持阅读正在运行的进程列表

IFS=$'\n'

p=$(ps -A -o %cpu  -o vsz -o time -o %c  --sort -%cpu | head -3  )

for i in $p
do
    echo $i
done;

但是当我出于某种原因尝试回声线时,所有" n"被" \ n"

取代
%CPU    VSZ     TIME COMMAND
16.3 9761940 04:06:02 firefox
9.2 3255916 02:19:27 Web Co
te
t
^C

我将不胜感激任何帮助

谢谢

1 个答案:

答案 0 :(得分:1)

您没有使用bash运行脚本,因此您的IFS被设置为三个单独的字符,而不是一个换行符。其中一个字符是n,因此p的不加引号扩展将字母n视为字段分隔符。

以下是dash中的一个简单示例:

$ IFS=$'\n'
$ printf '%s' "$IFS" | hexdump -C
00000000  24 5c 6e                                          |$\n|
00000003

bash中的相同示例:

$ IFS=$'\n'
$ printf '%s' "$IFS" | hexdump -C
00000000  0a                                                |.|
00000001