2015-04-03 70 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