2010-07-09 5 views
1

Dans un script shell Je veux une variable p soit égale à "[email protected]", de sorte que les deux lignes de code suivantes produisent le même résultat:

for x in "$p"; do echo $x; done 
for x in "[email protected]"; do echo $x; done 

Si je [email protected] ou p="[email protected]" cela ne fonctionne pas. Lorsque les arguments de ligne de commande ont des espaces dans leurs noms, je ne peux pas trouver une solution simple à ce problème (la combinaison p="[email protected]" et for x in $p (guillemets supprimés autour de $ p) fonctionne lorsqu'il n'y a pas d'espaces).

Répondre

9

"[email protected]" est spécial en ce que, même s'il s'agit d'une expression à guillemets simples, elle s'étend à zéro ou plus de "mots". Vous ne pouvez pas faire la même chose avec un paramètre normal, mais (en utilisant une syntaxe légèrement différente), il peut être fait avec une variable de tableau/paramètres (par exemple dans bash, ksh, zsh):

array_var=("[email protected]") 
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done 
+0

bien, cela ne fonctionne pas. Il n'imprime rien. – sivann

+1

@sivann: Le code ci-dessus imprime seulement quelque chose si certains paramètres positionnels sont déjà établis (par exemple, enregistrez le code dans un fichier et exécutez-le avec des arguments supplémentaires: 'bash/chemin/vers/fichier arg1 '). Sans plus de détails, il est difficile de dire quels problèmes vous rencontrez. Vous voudrez peut-être poser une nouvelle question avec plus de détails sur ce que vous essayez de faire (et ce que vous avez déjà essayé). –

Questions connexes