Если в ничего нет foo
, переменная file
получит буквальное значение foo / *
. Подстановка $ {file ## * /}
даст строку *
, а с echo
выведет все имена в текущем каталоге.
Чтобы исправить это в bash
, самым простым вариантом было бы установить параметр оболочки nullglob
с помощью shopt -s nullglob
. Это гарантирует, что подстановка имен файлов не распространяется на сам шаблон, если нет имен, соответствующих шаблону.
Из руководства bash
:
nullglob
Если установлено,
bash
позволяет шаблонам, которые не соответствуют файлам (см. Расширение пути выше), расширяться к нулевой строке , а не к себе.
Пс. Я бы хотел, чтобы в руководстве использовались «имена» или, возможно, «имена файлов», а не «файлы».