迭代ls -l输出的每一行

Iva*_*van 114 linux shell

我想迭代ls -l/some/dir/*输出中的每一行现在我正在尝试:ls -l /some/dir/*但是这会分别迭代行中的每个元素,所以我得到

-r - r -----
1
ivanevf
eng
1074
Apr
22
13:07
File1

-r - r -----
1
ivanevf
eng
1074
Apr
22
13:17
File2

但是我想整个迭代每一行.

我怎么做?

谢谢.

Ran*_*tor 237

将IFS设置为换行符,如下所示:

IFS='
'
for x in `ls -l $1`; do echo $x; done
Run Code Online (Sandbox Code Playgroud)

如果您不想永久设置IFS,请在其周围放置一个子shell:

(IFS='
'
for x in `ls -l $1`; do echo $x; done)
Run Code Online (Sandbox Code Playgroud)

或者在使用时使用 请改为:

ls -l $1 | while read x; do echo $x; done
Run Code Online (Sandbox Code Playgroud)

还有一个选项,它在同一个shell级别运行while/read:

while read x; do echo $x; done << EOF
$(ls -l $1)
EOF
Run Code Online (Sandbox Code Playgroud)

  • 管道到while时要小心,while会在子shell中运行,这意味着它无法在主进程中更改变量 (11认同)
  • 围绕它的子shell的+1不会永久设置IFS (4认同)
  • 您可能想要执行“read -r”,否则 bash 将从数据中删除未转义的反斜杠。 (3认同)

Ada*_*erg 6

这取决于你想要对每一行做什么.awk是这种处理的有用实用程序.例:

 ls -l | awk '{print $9, $5}'
Run Code Online (Sandbox Code Playgroud)

..在我的系统上打印目录中每个项目的名称和大小.