Preciso expandir um padrão glob (como ../smth*/*ou /etc/cron*/) em uma lista de arquivos, programaticamente. Qual seria a melhor maneira de fazer isso?
Você não precisa fazer nada de especial, apenas não cite o *.
Kevin
1
Embora se você estiver tentando analisá-lo, use uma matriz como a resposta diz.
Kevin
Respostas:
40
Apenas deixe expandir dentro do lado direito de uma declaração de matriz:
list=(../smth*/)# grab the list
echo "${#list[@]}"# print array length
echo "${list[@]}"# print array elementsfor file in"${list[@]}";do echo "$file";done# loop over the array
Observe que a opção do shell nullglobprecisa ser definida. Não está definido por padrão.
Evita um erro caso o glob (ou um dos vários globs) não corresponda a nenhum nome.
*
.Respostas:
Apenas deixe expandir dentro do lado direito de uma declaração de matriz:
Observe que a opção do shell
nullglob
precisa ser definida.Não está definido por padrão.
Evita um erro caso o glob (ou um dos vários globs) não corresponda a nenhum nome.
Defina
bash
comou
zsh
comfonte
unsetopt
e o mesmo parâmetro usado parasetopt
.Não há necessidade de complicar demais as coisas:
fonte
TEST=$(echo your/stuff*) && eval \"$TEST\"
irá produzir:your/stuff*: No such file or directory
TEST
variável como uma sequência, incluindo*
e não sendo expandida.