Dentro de aspas, o *
não será expandido para uma lista de arquivos. Para usar esse curinga com sucesso, ele deve estar fora das cotações.
Mesmo se o curinga fosse expandido, a expressão "${FILES}"
resultaria em uma única string, não em uma lista de arquivos.
Uma abordagem que funcionaria seria:
#!/bin/bash
DIR="/home/john/my directory/"
for f in "$DIR"/*.txt
do
echo "${f}"
done
Acima, nomes de arquivos com espaços ou outros caracteres difíceis serão tratados corretamente.
Uma abordagem mais avançada poderia usar matrizes bash:
#!/bin/bash
FILES=("/home/john/my directory/"*.txt)
for f in "${FILES[@]}"
do
echo "${f}"
done
Nesse caso, FILES
é uma matriz de nomes de arquivos. Os parentes que cercam a definição fazem dela uma matriz. Observe que o *
está fora das cotações. A construção "${FILES[@]}"
é um caso especial: ela será expandida para uma lista de cadeias em que cada cadeia é um dos nomes de arquivos. Nomes de arquivos com espaços ou outros caracteres difíceis serão tratados corretamente.