Вы действительно хотите избежать ls
здесь. Более надежное и портативное решение - просто l oop на матчах.
Из коробки оболочка делает не включать точечные файлы в общие результаты glob; но если вы включите точку как часть подстановочного знака, она развернется как обычно.
Вы не можете использовать двойные кавычки вокруг подстановочного знака; это приведет к изменению значения *
с подстановочного знака на буквальную звездочку (и аналогично для других подстановочных знаков, таких как ?
, [
и т. д. c).
for user in /Users/*; do
case $user in *Shared*) continue;; esac
for file in "$user/Library/Application Support/Adobe/CoreSync/plugins/livetype/.r/".[!.]*otf; do
if [[ -a "$file" ]]; then
echo "True"
else
echo "False"
fi
break
done
done
double for
l oop не совсем интуитивно понятно, но это хороший способ надежно проверить, соответствует ли подстановочный знак каким-либо файлам. Запустите al oop, но выполните только первую итерацию; если первый файл не существует, это означает, что оболочка не смогла раскрыть подстановочный знак и вернула его дословно. (Это стандартное и устаревшее поведение оболочки Bourne; современные оболочки имеют nullglob
et c, который некоторые администраторы хотели бы включить для всех новых пользователей.)