Параметр оболочки nullglob - это действительно башизм.
Чтобы избежать необходимости утомительного сохранения и восстановления состояния nullglob, я бы установил его только в подоболочке, которая расширяет глобус:
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 действия используются для find вместо неявного по умолчанию -print действия, так что find завершится как только он найдет первый файл, соответствующий критериям поиска. В случае совпадения большого количества файлов это должно выполняться намного быстрее, чем echo glob*
или ls glob*
, и это также исключает возможность чрезмерного заполнения расширенной командной строки (некоторые оболочки имеют ограничение в 4 КБ).
Если find ощущается как избыточное и число файлов, которые могут совпадать, невелико, используйте stat:
if stat -t glob* >/dev/null 2>&1
then
echo found
else
echo not found
fi