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