Se você deseja trabalhar com um resultado de expansão com array em um shell POSIX básico, você deve tomar cuidado com $IFS
e geração de nome de arquivo. Você pode trabalhar com segurança com variáveis sem aspas - mas geralmente não é a maneira mais simples de fazê-lo.
Os Shell's são projetados para funcionar em primeiro lugar com argumentos - por isso sugiro que você use a matriz de argumentos:
set -- "${FILES%/*}"/*
Você terá que verificar o resultado de um glob - em qualquer shell POSIX, se o glob não resolver, ele continuará sendo um parâmetro iterável. Isso também é verdade para for var in glob*
- sem testar os resultados, você não pode ter certeza de que está realmente trabalhando com um arquivo. Então ...
for f do [ -e "$f" ] || [ -L "$f" ] && printf %s\n "$f"; done
Você pode iterar os itens em sua matriz arg como for arg do ...;done
. Você também pode endereçá-los de dentro do loop como "$1"
"$2
"e etc, ou como um todo com "$@"
e "$*"
dependendo. A matriz permanece definida quando o loop é concluído.
Uma última nota, como mencionei antes, a geração de nome de arquivo é um recurso configurável do shell. Pode ser desabilitado com set -f
ou habilitado com set +f
. Além do mais, isso só funciona se houver nomes de arquivos correspondentes no diretório em que você pesquisa - se não houver nenhum, você simplesmente recupera seu glob não resolvido. Globbing também requer permissões de busca e execução para um diretório. Então, se você achar que não pode resolver uma correspondência glob, você pode tentar ativar a geração de nome de arquivo, verificar as permissões do caminho e verificar se há arquivos lá em primeiro lugar.