grep的输出不是逐行的

PTw*_*wno 1 bash shell awk grep

我有这个代码:

list=$(ls -l | awk '{print$3,$6,$7,$8,$9}' | grep -v root)
echo $list
Run Code Online (Sandbox Code Playgroud)

并且输出是所有过滤字符串的联合版本,如下所示:

> avahi Nov 16 21:50 1170 syslog Nov 16 21:50 1171 messagebus ...
Run Code Online (Sandbox Code Playgroud)

我想要的是:

> avahi Nov 16 21:50 1170
> syslog Nov 16 21:50 1171
> messagebus Nov 16 21:50 1179
> ...
Run Code Online (Sandbox Code Playgroud)

我还读过grep的默认输出应该给我的段落版本就像我想要的那样,但事实并非如此.我究竟做错了什么?

daw*_*awg 5

鉴于:

$ txt="line 1
> line 2
> line 3
> line 4"
Run Code Online (Sandbox Code Playgroud)

(即txt设置为line 1\nline 2\nline 3\nline 4)

考虑:

$ echo $txt
line 1 line 2 line 3 line 4
Run Code Online (Sandbox Code Playgroud)

VS:

$ echo "$txt"
line 1
line 2
line 3
line 4
Run Code Online (Sandbox Code Playgroud)

使用引号或Bash将解释和拆分空格(如\n行的末尾).

另外,尝试解析输出通常不是一个好主意,ls因为文件名可以包含空格.文件名中的空格将破坏管道的其余部分(正如您所写的那样).

使用带有glob的循环.