如果没有扩展名为.c的文件,则bash for loop包含通配符(* .c)。 我如何解决?

我在UNIX上使用bash(sparc 10)

for file in $SCPATH/$LIBNAME/*.{gob,c,cpp,h}; do ln -s $file; done; 

问题是:如果没有扩展名为“c”的文件,它将把“ .c”放在$ file中,而ln -s会创build一个到 .c 的链接 。 这是一个知道的问题? 我怎么能解决它(除了明显的“如果不* .c”黑客)。

你需要在循环之前设置nullglob

 shopt -s nullglob 

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

完成后,要将其重置为原始行为,请使用:

 shopt -u nullglob 

正如丹尼斯·威廉姆森在其中一个评论中指出的那样。