2015-04-03 71 views
8

我想遍歷所有匹配擴展名爲jpgtxt的文件。我使用:如果文件名glob沒有匹配,該如何匹配

for file in myDir/*.{jpg,txt} 
do 
    echo "$file" 
done 

問題:如果目錄中沒有JPG文件可言,循環將有一個迭代與輸出myDir/*.jpg。我認爲*將被任意文件替換(如果沒有文件存在,則不能擴展)。我怎樣才能避免不必要的迭代?

+0

如果模式沒有比賽,默認/ POSIX的行爲是把模式作爲一個字符串,而不是忽略或刪除模式。 – chepner 2015-04-04 13:04:47

+0

與問題無關,但請注意,大括號不是該模式的一部分。它們是生成一組相關字符串的'bash'簡寫,並且在模式匹配開始之前擴展爲字符串'myDir/*。jpg myDir/*。txt'。 – chepner 2015-04-04 13:07:30

回答

12

利用這一點避免不必要的重複:

shopt -s nullglob 

man bash

nullglob:如果設置,bash允許匹配任何文件(見上面的路徑名擴展)擴展到哪些模式空字符串,而不是它們自己。

見:help shoptshopt