Parece que o Google teve a resposta para este.
Coloque este encantamento mágico antes da declaração for
:
shopt -s nullglob
O seguinte snippet funciona bem quando na verdade existem *.txt
arquivos no diretório.
for txt in *.txt
do
echo "loading data from $txt"
done
Quando não existem, o literal *.txt
cai no loop como $ txt (não bom).
Como altero esse código para que, quando não houver arquivos *.txt
, o bloco do ... done
seja ignorado?
Parece que o Google teve a resposta para este.
Coloque este encantamento mágico antes da declaração for
:
shopt -s nullglob
A opção nullglob (resposta do @kfmfe04) é melhor se você estiver usando o bash (não uma shell da marca X), e não precisa se preocupar com o nullglob mudar / quebrar qualquer outra coisa. Caso contrário, você pode usar essa opção (um pouco confusa):
for txt in *.txt
do
[ -e "$txt" ] || continue
echo "loading data from $txt"
done
Isso silenciosamente ignora arquivos que não existem (principalmente "* .txt" se não houver correspondências, mas possivelmente também arquivos que foram excluídos entre quando o for
gerou a lista e quando o loop chegou até eles. .)