Caractères génériques dans les citations

32

Ce sera facile, mais si je me souviens bien, lors de l’écriture de scripts dans un shell, l’utilisation de guillemets doubles permettrait d’agrandir les variables globales et les variables.

Mais dans le code suivant:

#!/bin/sh

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

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

J'obtiens ce résultat:

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

Ainsi, les guillemets simples empêchent l’expansion globale ET variable, mais les guillemets doubles ne permettent qu’une expansion variable et pas d’alternation?

Puis-je glober dans n'importe quel motif de citation?

tisek
la source

Réponses:

26

Vous avez raison: la segmentation ne fonctionne pas entre guillemets simples ou doubles. Cependant, vous pouvez interpoler la segmentation avec des chaînes entre guillemets:

$ echo "hello world" * .sh "au revoir monde"
Bonjour tout le monde [liste des fichiers] Au revoir monde
Flup
la source
6
Ou même echo "$hello and $goodbye".*(mélangez des extensions variables, des espaces et un glob dans le même "mot".
vonbrand
1
Englobement ne semble pas fonctionner dans ce cas, echo /path/to/file/*${variable}. Comment puis-je parcourir tout en ajoutant un email interpolé?
CMCDragonkai
2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionfonctionne bien pour moi, contrairement à la réponse acceptée, je devais supprimer les espaces entre le "et le *. J'espère que ça aide.
LostBalloon
@CMCDragonkai, @LostBalloon J'utilise le modèle suivant lorsque je veux utiliser des globs avec des variables pouvant avoir des espaces:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell