Bash:在“ls -1”输出行上使用变量进行迭代

Bash:在“ls -1”输出行上使用变量进行迭代

在如下的简单循环中

for f in $(ls -1) ;
        do
        something
done

我想存储每个线ls -1变量的输出f

有没有办法在不设置的情况下做到这一点IFS=$'\n'

答案1

正如我们在评论中所说,不解析ls它很容易出错,而且完全没有必要。所有你需要的是

for f in *;
do
        something
done

这将迭代当前目录中的文件和目录1$f并将它们中的每一个(空格和全部)保存为.例如:

$ ls -A1
file1
file 2
$ for f in *; do echo "File is '$f'"; done
File is 'file1'
File is 'file 2'

1在 bash 中,这将忽略以(隐藏文件)开头的文件/目录名称.,除非您已dotglob设置shopt -s dotglob.

答案2

使用 while 循环代替:

$ touch "one file"
$ touch "second  file   edsfs"
$ ls
one file  second  file   edsfs
$ ls -1
one file
second  file   edsfs
$ for f in $(ls -1); do echo "\"$f\""; done
"one"
"file"
"second"
"file"
"edsfs"
$ while read f; do echo "\"$f\""; done < <(ls -1)
"one file"
"second  file   edsfs"

相关内容