我有一个 bash 脚本,其中需要迭代 find 命令输出的每一行,但似乎我正在迭代 find 命令中的每个单词(以空格分隔)。到目前为止我的脚本看起来像这样:
folders=`find -maxdepth 1 -type d`
for $i in $folders
do
echo $i
done
我希望这会给出如下输出:
./dir1 and foo
./dir2 and bar
./dir3 and baz
但我得到这样的输出:
./dir1
and
foo
./dir2
and
bar
./dir3
and
baz
我在这里做错了什么?
folders=`foo`
总是错误的,因为它假设您的目录不会包含空格、换行符(是的,它们是有效的!)、全局字符等。一种强大的方法(需要 GNU 扩展)-print0
)如下:
while IFS='' read -r -d '' filename; do
: # something with "$filename"
done < <(find . -maxdepth 1 -type d -print0)
另一种安全可靠的方法是find
本身直接调用您想要的命令:
find . -maxdepth 1 -type d -exec printf '%s\n' '{}' +
See the 使用查找 http://mywiki.wooledge.org/UsingFind完整处理该主题的 wiki 页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)