bash echo 用转义字符替换字符

bash echo replacing character with escape charackter

我正在尝试自己创建 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

如有任何帮助,我将不胜感激

谢谢

您的 运行 脚本没有 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