bash echo заменяет персонажа на escape-символ - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь создать верхнюю команду самостоятельно.Я застрял в точке, где я читаю список запущенных процессов

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

IБуду признателен за любую помощь

Спасибо

1 Ответ

0 голосов
/ 03 июня 2018

Вы не запускаете свой скрипт с 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
...