通過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)'。 –