在如下的简单循环中
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"