用于循环和全局扩展的Bash

用于循环和全局扩展的Bash,bash,Bash,考虑以下bash代码: for f in /tmp/*.dat; do echo ${f}; done 当我运行此程序时,/tmp中没有*.dat文件,输出为: /tmp/*.dat 这显然不是我想要的。但是,当有这样一个文件时,它会打印出正确的文件 /tmp/foo.dat 当目录中没有这样的文件时,如何强制for循环返回'nothing'。find-命令不是一个选项,很抱歉:/I如果*.dat是文件还是非文件,我还希望有一个未经测试的解决方案。到目前为止有什么解决方案吗?这应该可以:

考虑以下bash代码:

 for f in /tmp/*.dat; do echo ${f}; done
当我运行此程序时,
/tmp
中没有
*.dat
文件,输出为:

/tmp/*.dat
这显然不是我想要的。但是,当有这样一个文件时,它会打印出正确的文件

/tmp/foo.dat
当目录中没有这样的文件时,如何强制for循环返回'nothing'。
find
-命令不是一个选项,很抱歉:/I如果
*.dat
是文件还是非文件,我还希望有一个未经测试的解决方案。到目前为止有什么解决方案吗?

这应该可以:

shopt -s nullglob
...

空球

如果设置了,Bash允许扩展不匹配任何文件的文件名模式 指向空字符串,而不是其本身

有趣的阅读: