所以,
for f in *.c; do echo "That $f is the best C code I have ever seen"; done
如果没有 c 文件,将很高兴打印
That *.c is the best C code I have ever seen
这是不可取的。如果没有 c 文件,是否有一种优雅的方式来修复/表达我想完全跳过循环的事实?
设置nullglob
选项。如果没有匹配,则扩展将为空。
shopt -s nullglob
for f in *.c; do …
请注意,这是一个特定于 bash 的构造,它不能在 plain 下工作sh
。
n=`ls -1 *.c 2> /dev/null | wc -l`
if [ $n != 0 ]
then
for f in *.c; do echo "That $f is the best C code I have ever seen"; done
fi
在 Bash 中,shopt -s nullglob
将导致不匹配任何文件的 glob 返回一个空扩展,而不是标识。
对于 POSIX,可能类似于
case *.c in '*.c' ) echo no match ;; esac
有一个明显的病态异常,您可能需要单独检查是否有一个匹配的文件,其名称是字面意思*.c
.
尝试:
for f in `ls -1 *.c`; do
echo That $f is the best C code I have ever seen
done