-1
#!/bin/sh
file_list=`find . -type f`
IFS=$(echo) #this enables for loop to break on newline
for file_ in $file_list; do
file $file_
done
這個shell腳本會驚人地報告(File name too long)
。我想這個腳本會給file
喂3次$file_list
!!!爲什麼for循環中的文件命令行爲如此荒謬
但是,如果我用簡單的echo
更改file
命令,那麼腳本將逐行打印當前目錄中的所有文件。
您正在將'IFS'設置爲空並禁用分詞。所以'file_'包含'find'的* entire *輸出。這對命令行工作來說太長了。 「echo」是「工作」的,因爲換行符通過顯示。嘗試在循環中使用'printf%s'$ file_「'或'declare -p file_',看看你得到了什麼。 –
另請參閱[Bash FAQ 001](http://mywiki.wooledge.org/BashFAQ/001)瞭解如何正確讀取流中的逐行數據。並閱讀[不要閱讀行](http://mywiki.wooledge.org/DontReadLinesWithFor),看看爲什麼這是一個壞主意。 –
您可能打算使用'IFS = $(echo)'(命令替換,而不是參數擴展)。但這仍然是一個糟糕的主意。 – chepner