Globbing ocorre apenas em contextos de lista, então você precisa atribuir a uma variável array . Com ksh93 , bash , zsh , mksh ou yash :
the_files=(~/downloads/stack-*-linux-x86_64-static.tar.gz)
Ou em sh :
set -- ~/downloads/stack-*-linux-x86_64-static.tar.gz
para atribuir a $1 , $2 ...
E para obter o primeiro elemento: "${the_files[1]}" em zsh ou yash (ou apenas $the_files[1] em zsh ) ou "${the_files[0]}" em ksh ou bash .
Para todos os elementos: "${the_files[@]}" (também $the_files in zsh ).
Para a concatenação dos elementos associados ao primeiro caractere de $IFS : "${the_files[*]}" (também "$the_files" com zsh ). Ou juntou-se a qualquer string em zsh : ${(j:, :)the_files} (aqui associada a , ).
Mais algumas notas
Atribuição a variáveis escalares
the_file=~/downloads/stack-*-linux-x86_64-static.tar.gz
O ~ seria expandido, mas não o glob. No entanto, se você esqueceu de usar aspas ao expandir a variável, como em:
printf '%s\n' $the_file # instead of printf '%s\n' "$the_file"
Em seguida, o conteúdo de $the_file estaria sujeito à divisão + glob e expandido nesse ponto , o que poderia fazer você pensar que funciona, mas na verdade não combina com a expansão do til pode até ficar mais confuso.
Por exemplo, se $HOME for /All * Users/me e $IFS estiver definido como seu valor padrão, $the_file conterá /All * Users/me/downloads/stack-*-linux-x86_64-static.tar.gz e printf imprimirá /All , seguido de todos os nomes de arquivo em o diretório atual (a expansão de * ), seguido pela expansão de Users/me/downloads/stack-*-linux-x86_64-static.tar.gz .
E se o padrão não corresponder a nenhum arquivo
Em zsh , você recebe um erro, mas em outros shells, o padrão é deixado intacto. Melhor aqui seria o padrão se expandir para nada.
Com zsh , isso é com o qualificador N glob:
the_files=(~/downloads/stack-*-linux-x86_64-static.tar.gz(N))
ksh93 tem um recurso semelhante ao seu operador ~(N) glob:
the_files=(~/downloads/~(N)stack-*-linux-x86_64-static.tar.gz)
Para outros shells, você precisa ativar alguma opção global em ( shopt -s nullglob in bash , set -o nullglob in yash ).