2009-07-10 82 views
0

如何在bash脚本的命令中包含带有表达式的字符串?在bash命令中包含字符串表达式

考虑以下几点:

#!/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 

脚本打印到屏幕上:

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

...所以我想我的语法是生产命令字符串我想要的。当我在命令行手动输入打印的字符串时,该命令将除grep表达式中的所有数据库名称都放入'outfile'中。

但该脚本将所有数据库名称(不包括grep表达式中的那些名称)都导出到该文件。为什么脚本忽略grep表达式?

回答

3

环境变量(和其他特殊字符)不会在单引号字符串内部扩展。 echo语句中的一个是因为字符串本身由双引号分隔。该字符串中的单引号是字符串的一部分,而不是分隔符。

请参阅bash manual关于引用的说法。

2

使用双引号而不是单引号。

mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile 
相关问题