通过shellcheck.net运行脚本我被告知"for
loops over find
output are fragile."足够公平,带空格的文件名总是很棘手。令人困惑的Bash语法 - 重定向到循环
建议的替换代码(反正是其中之一)是这样的:
while IFS= read -r -d '' file
do
#do stuff
done < <(find . -name '*' -print0)
我所熟悉的用于输入文本,从文件到命令<
运营商,并明确从find
结果被喂入循环。所以,当我第一次看到这个,我认为这是受害者一些格式化的问题,并试图“清理”的最后一行。但是,消除< <
之间的空白导致语法错误一样,增加一个到<(
。
那么什么是< <(cmd)
构造在做什么?道歉,如果这是一个简单或多余的问题,要搜索这些东西并不容易!
明白了;所以命令的输出被发送到一个文件描述符,并且'<(cmd)'语句被扩展为该文件描述符名称。 (现在我有一个术语来搜索是否需要更多信息!) – miken32
是的。例如,请参阅'echo <(echo foo)'和'cat <(echo foo)'。 –