nullglob shell选项确实是一种bashism。
为了避免对nullglob状态进行繁琐的保存和恢复,我只将其设置在扩展glob的子外壳中:
if test -n "$(shopt -s nullglob; echo glob*)"
then
echo found
else
echo not found
fi
为了更好的可移植性和更灵活的通配,请使用find:
if test -n "$(find . -maxdepth 1 -name 'glob*' -print -quit)"
then
echo found
else
echo not found
fi
显式-print -quit操作用于查找,而不是默认的隐式-print操作,以便查找到第一个符合搜索条件的文件后,查找将立即退出。在匹配大量文件的情况下,此文件的运行速度应比echo glob*
或快得多ls glob*
,并且还避免了过度填充扩展命令行的可能性(某些外壳程序的长度限制为4K)。
如果发现感觉有点过头了,并且可能匹配的文件数量很少,请使用stat:
if stat -t glob* >/dev/null 2>&1
then
echo found
else
echo not found
fi