Curingas dentro de aspas

32

Essa será uma tarefa fácil, mas, em minhas memórias, quando o script de shell, o uso de aspas duplas permitiria expandir globbing e variáveis.

Mas no seguinte código:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Eu recebo este resultado:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

Portanto, as aspas simples impedem a expansão glob E variável, mas as aspas duplas permitem apenas a expansão variável e sem globos?

Posso fazer glob em qualquer padrão de cotação?

tisek
fonte

Respostas:

26

Você está correto: o globbing não funciona com aspas simples ou duplas. No entanto, você pode interpolar globbing com sequências de aspas duplas:

$ echo "olá mundo" * .sh "adeus mundo"
olá mundo [lista de arquivos] adeus mundo
Flup
fonte
6
Ou mesmo echo "$hello and $goodbye".*(mix expansões variáveis, espaços e uma bola na mesma "palavra".
vonbrand
1
Globbing não parece funcionar neste caso echo /path/to/file/*${variable},. Como faço glob enquanto anexo um email interpolado?
CMCDragonkai
2
O @CMCDragonkai echo "$FOLDER_PATH"/*.extensionfunciona bem para mim, ao contrário da resposta aceita, tive que remover o espaço em branco entre o "e o *. Espero que ajude.
LostBalloon
@CMCDragonkai, @LostBalloon eu uso o seguinte padrão quando eu quiser usar globs com variáveis que podem ter espaços:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell