我想迭代一个文件列表.这个列表是find命令的结果,所以我想出了:
getlist() {
for f in $(find . -iname "foo*")
do
echo "File found: $f"
# do something useful
done
}
Run Code Online (Sandbox Code Playgroud)
没关系,除非文件名中有空格:
$ ls
foo_bar_baz.txt
foo bar baz.txt
$ getlist
File found: foo_bar_baz.txt
File found: foo
File found: bar
File found: baz.txt
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能避免空格分裂?
我有一个关于bash如何工作的基本问题,以及一个相关的实际问题.
基本问题:假设我在一个有三个子目录的目录中:a,b和c.
母鸡的代码
for dir in $(ls)
do
echo $dir
done
Run Code Online (Sandbox Code Playgroud)
吐出:
a b c
a b c
a b c
Run Code Online (Sandbox Code Playgroud)
即,dir始终存储我的所有文件/目录的列表cwd.我的问题是:为什么世界会这么方便?在我看来,dir一次存储每个元素更有用和直观,即我想要输出
a
b
c
Run Code Online (Sandbox Code Playgroud)
另外,根据其中一个答案 - 使用它是错误的for dir in $(ls),但是当我使用时,for dir in $(ls -l)我得到更多的副本a b c(比cwd中的目录/文件更多).这是为什么?
我的第二个问题是实用的:如何在我cwd用大写字母W开头的所有目录(不是文件!)上循环?我开始了
for dir in `ls -l W*`
Run Code Online (Sandbox Code Playgroud)
但这失败了因为a)问题1和b)中的原因,因为它不排除文件.建议表示赞赏.