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