4

所以,

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 文件,是否有一种优雅的方式来修复/表达我想完全跳过循环的事实?

4

4 回答 4

7

设置nullglob选项。如果没有匹配,则扩展将为空。

shopt -s nullglob
for f in *.c; do …

请注意,这是一个特定于 bash 的构造,它不能在 plain 下工作sh

于 2013-04-10T20:33:56.320 回答
0
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
于 2013-04-10T20:33:46.553 回答
0

在 Bash 中,shopt -s nullglob将导致不匹配任何文件的 glob 返回一个空扩展,而不是标识。

对于 POSIX,可能类似于

case *.c in '*.c' ) echo no match ;; esac

有一个明显的病态异常,您可能需要单独检查是否有一个匹配的文件,其名称是字面意思*.c.

于 2013-04-10T20:40:47.423 回答
-2

尝试:

for f in `ls -1 *.c`; do
 echo That $f is the best C code I have ever seen
done
于 2013-04-10T20:32:55.220 回答