Se não houver nada no diretório foo
, a variável file
receberá o valor literal foo/*
. A substituição ${file##*/}
produzirá a string *
e, com echo
, todos os nomes serão exibidos no diretório atual.
Para corrigir isso em bash
, a opção mais simples seria definir a opção nullglob
shell com shopt -s nullglob
. Isso garante que a globbing do nome do arquivo não se expanda para o próprio padrão se não houver nomes correspondentes ao padrão.
Do manual bash
:
nullglob
If set,
bash
allows patterns which match no files (see Pathname Expansion above) to expand to a null string, rather than themselves.
Eu gostaria que o manual usasse "nomes" ou possivelmente "nomes de arquivos" em vez de "arquivos".