2014-04-04 25 views
0

我想在当前目录中处理一组文件(* .ui)。如果找到一些* .ui文件,以下脚本将按预期工作。但是,如果当前目录中不存在.ui文件,则for循环将全部输入相同。这是为什么 ?bash:for不存在的文件的循环

for f in *.ui 
do 
    echo "Processing $f..." 
done 

它打印:

Processing *.ui... 
+0

FAQ:'shop -s nullglob' – devnull

回答

1

用途:

shopt -s nullglob 

man bash

了nullglob 如果设置,bash允许拍不匹配文件的terns(参见上面的路径名扩展 )扩展为空字符串,而不是它们自己。

+0

我喜欢这个解决方案,因为它接近于C/C++。更多细节在这里:http://mywiki.wooledge.org/NullGlob – dplamp

+0

好的!这个标志的默认值是什么?或者有什么方法来解除它? – fedorqui

+0

使用'shopt -u'来禁用和'shopt -s'来启用。 – dogbane

0

你已经有了如何,“为什么”是bash将首先尝试匹配*.ui的文件,但如果不工作(它会没有结果),它会假设你的意思是字符串"*.ui"

for f in "*.ui" 
do 
    echo "Processing $f..." 
done 

WIL确实打印"Processing *.ui"