2009-07-10 9 views
0

Comment inclure une chaîne avec une expression dans une commande dans un script bash?Ajout d'expressions chaîne dans les commandes bash

Considérez ce qui suit:

#!/bin/bash 
exclusions='Database|information_schema|mysql' 
echo "mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile" 
mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile 

Les impressions de script à l'écran:

mysql -e 'SHOW DATABASES' | grep -E -v 'Database|information_schema|mysql' > outfile 

... donc je pense que ma syntaxe est la production de la chaîne de commande que je veux. Et quand je saisis manuellement la chaîne imprimée sur la ligne de commande, la commande place tous les noms de bases de données, sauf ceux de l'expression grep, dans 'outfile'.

Mais le script exporte tous les noms de base de données, sans exclure ceux de l'expression grep, dans le fichier. Pourquoi le script ignore-t-il l'expression grep?

Répondre

3

Les variables d'environnement (et autres caractères spéciaux) ne sont pas développées à l'intérieur de chaînes à guillemets simples. Celui de l'instruction echo est, parce que la chaîne elle-même est délimitée par les guillemets doubles. Les guillemets simples dans cette chaîne font partie de la chaîne, pas les délimiteurs.

Voir ce que le bash manual dit à propos de la citation.

2

Utilisez des guillemets doubles au lieu de guillemets simples.

mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile 
Questions connexes