8
我想遍历所有匹配扩展名为jpg
或txt
的文件。我使用:如果文件名glob没有匹配,该如何匹配
for file in myDir/*.{jpg,txt}
do
echo "$file"
done
问题:如果目录中没有JPG文件可言,循环将有一个迭代与输出myDir/*.jpg
。我认为*
将被任意文件替换(如果没有文件存在,则不能扩展)。我怎样才能避免不必要的迭代?
我想遍历所有匹配扩展名为jpg
或txt
的文件。我使用:如果文件名glob没有匹配,该如何匹配
for file in myDir/*.{jpg,txt}
do
echo "$file"
done
问题:如果目录中没有JPG文件可言,循环将有一个迭代与输出myDir/*.jpg
。我认为*
将被任意文件替换(如果没有文件存在,则不能扩展)。我怎样才能避免不必要的迭代?
利用这一点避免不必要的重复:
shopt -s nullglob
从man bash
:
nullglob
:如果设置,bash允许匹配任何文件(见上面的路径名扩展)扩展到哪些模式空字符串,而不是它们自己。
见:help shopt
和shopt
如果模式没有比赛,默认/ POSIX的行为是把模式作为一个字符串,而不是忽略或删除模式。 – chepner 2015-04-04 13:04:47
与问题无关,但请注意,大括号不是该模式的一部分。它们是生成一组相关字符串的'bash'简写,并且在模式匹配开始之前扩展为字符串'myDir/*。jpg myDir/*。txt'。 – chepner 2015-04-04 13:07:30