2009-08-30 9 views
1

Comment écrire un script shell (bash sur HPUX) qui reçoit une chaîne en tant qu'argument contenant un astérisque? L'astérisque est étendu à tous les noms de fichiers dans le répertoire courant, même si j'attribue une variable comme celle-ci.Entrée de script shell contenant un astérisque

DB_QUERY="$2" 
echo $DB_QUERY 

Répondre

2

L'astérisque « * » est pas le seul personnage que vous avez à surveiller, il y a beaucoup d'autres méta-charaters shell qui peuvent causer des problèmes, comme <> $ | ; &

La réponse simple est toujours de mettre vos arguments entre guillemets (c'est la citation double ») lorsque vous ne savez pas ce qu'ils pourraient contenir

Pour votre exemple, vous devez écrire:.

.
DB_QUERY="$2" 
echo "$DB_QUERY" 

Il commence à devenir gênant quand vous voulez que votre argument pour être utilisé en tant que paramètres multiples ou commencer à utiliser eval, mais vous pouvez demander à ce sujet séparément

2

Vous devez toujours placer des guillemets autour d'une référence de variable si vous voulez l'empêcher de déclencher l'extension du nom de fichier. Ainsi, dans votre exemple, utilisez:

DB_QUERY="$2" 
echo "$DB_QUERY" 
0

Dans le premier exemple, utiliser des guillemets simples:

 
myscript my_db_name 'SELECT * FROM table;' 

Dans le second exemple, utiliser des guillemets doubles:

 
echo "$DB_QUERY" 
Questions connexes