2015-11-24 26 views
4

我希望將這些文件遍歷一個特殊類型(如.test)的文件夾中:水珠不匹配任何擴展到本身,而不是什麼

所以我寫了一個小腳本名稱for_loop

for f in *.test 
do 
echo 'This is f: '${f} 
done 

後(chmod +x for_loop)我可以./for_loop啓動它。

如果有.test文件,everthing是正常的,但如果文件夾中沒有與*.test匹配的文件,則for循環仍會執行一次。在這種情況下,輸出的樣子:

This is f: *.test 

但我認爲,如果有該文件夾中沒有文件匹配水珠圖案,就沒有輸出。爲什麼不是這種情況?

回答

5

這是默認行爲。

擺脫它,使nullglob

shopt -s nullglob 

Greg's Wiki - nullglob

擴大了nullglob不匹配的水珠零參數,而不是 自己。

...

沒有了nullglob,水珠會擴大到字面*在一個空 目錄,導致1

或者使用zsh錯誤計數,默認情況下啓用了此glob!

$ for f in *.test; do echo "$f"; done 
zsh: no matches found: *.test 
+1

非常感謝! – mrbela

+0

你會建議他把它放在他的腳本或他的bashrc的一部分,或者你通常會把它放在哪裏? – ojblass

+1

@ojblass我認爲最好把它放在你想要這種行爲的腳本中。這樣,只要腳本停止運行,默認行爲就會出現。但是,當然,如果你喜歡這種行爲而不是默認的行爲,你可以將它添加到'〜/ .bashrc'中。就我而言,我只是在需要時使用它,而不是默認的。 – fedorqui

相關問題