2011-07-18 18 views
1

太多的說法我寫了一個shell腳本,該腳本的一部分失敗了,它說太多的參數:造成通配符

if [ -f ABC_DEF_*.* ]; then 

我想要做的,就是測試是否有任何這樣的文件匹配的字符串,但殼抱怨說太多的參數。在目錄中有20個這樣的文件。

請問這是shell擴展通配符並轉向ABC_DEF_ 成20個文件名的列表? 如果是的話,我該如何解決這個問題?

回答

0

問題是你不能使用[ -f <more then one> ]。它甚至沒有意義:當所有文件存在或至少有一個文件存在時,是否返回true

如果你想測試存在

,做NUM=$(ls <pattern>|wc -l)

1

您可以使用[ -f <filename with wildcard> ]。如果存在一個或多個匹配文件名和通配符的文件,則返回true,如果有比if語句可以使用的匹配更多的文件,則會拋出「太多」錯誤,並且不會執行語句if塊。如果if語句是[ ! -f <filename with wildcard> ],它將在所有情況下按預期工作。 話雖如此,您的解決方案適用於操作的所需行爲(並且不會在發生錯誤時反轉邏輯)。