Bash grep的输出为';逐行

Bash grep的输出为';逐行,bash,shell,awk,grep,Bash,Shell,Awk,Grep,我有以下代码: list=$(ls -l | awk '{print$3,$6,$7,$8,$9}' | grep -v root) echo $list 输出是所有过滤字符串的联合版本,如下所示: > avahi Nov 16 21:50 1170 syslog Nov 16 21:50 1171 messagebus ... > avahi Nov 16 21:50 1170 > syslog Nov 16 21:50 1171 > messagebus Nov

我有以下代码:

list=$(ls -l | awk '{print$3,$6,$7,$8,$9}' | grep -v root)
echo $list
输出是所有过滤字符串的联合版本,如下所示:

> avahi Nov 16 21:50 1170 syslog Nov 16 21:50 1171 messagebus ...
> avahi Nov 16 21:50 1170
> syslog Nov 16 21:50 1171
> messagebus Nov 16 21:50 1179
> ...
我想要的是:

> avahi Nov 16 21:50 1170 syslog Nov 16 21:50 1171 messagebus ...
> avahi Nov 16 21:50 1170
> syslog Nov 16 21:50 1171
> messagebus Nov 16 21:50 1179
> ...
我还读到grep的默认输出应该提供我想要的段落版本,但事实并非如此。我做错了什么?

给定:

$ txt="line 1
> line 2
> line 3
> line 4"
(即,
txt
被设置为
第1行\nline 2\nline 3\nline 4

考虑:

$ echo $txt
line 1 line 2 line 3 line 4
vs:

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

另外,由于文件名中可以包含空格,因此通常需要尝试解析
ls
的输出。文件名中的空格将打断管道的其余部分(如您所写)

使用带有glob的循环

给定:

$ txt="line 1
> line 2
> line 3
> line 4"
(即,
txt
被设置为
第1行\nline 2\nline 3\nline 4

考虑:

$ echo $txt
line 1 line 2 line 3 line 4
vs:

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

另外,由于文件名中可以包含空格,因此通常需要尝试解析
ls
的输出。文件名中的空格将打断管道的其余部分(如您所写)


使用带有glob的循环

如果您想看到单独的行,只需给出命令:
ls-l | awk'{print$3、$6、$7、$8、$9}'| grep-v root
引号:
echo“$list”
输出中的
从哪里来?除非您有充分的理由不这样做,否则始终在shell脚本中引用变量。如果您想看到单独的行,只需给出命令:
ls-l | awk'{print$3、$6、$7、$8、$9}'| grep-v root
引号:
echo“$list”
输出中的
从何而来?除非您有充分的理由不这样做,否则请始终在shell脚本中引用变量。