2011-10-08 70 views
0

我的shell脚本中有以下行。awk中的变量

time mysqlshow -u$user -p$password | egrep -v 'information_schema|performance_schema' | awk '{print "mysql -u$user -p$password -Bse \"drop database", $2, "\""}' 

第一个$用户正确更改为用户名变量。但awk声明中的那个不是。我试图添加带有或不带有转义字符的双引号和单引号,但它不起作用。

回答

2

你需要确保$user$password用双引号(")或没有和,as @jkerian mentioned包围,即$2由单引号(')或包围,如果是双引号,前面有一个反斜杠使\$2

试试这个(这是在我看来,吸尘器一个):

time mysqlshow -u$user -p$password | 
    egrep -v 'information_schema|performance_schema' | 
    awk '{print "mysql -u'"$user"' -p'"$password"' -Bse \"drop database", $2, "\""}' 

或者这样:

time mysqlshow -u$user -p$password | 
    egrep -v 'information_schema|performance_schema' | 
    awk '{print "mysql -u'$user' -p'$password' -Bse \"drop database", $2, "\""}' 

或者这样:

time mysqlshow -u$user -p$password | 
    egrep -v 'information_schema|performance_schema' | 
    awk "{print \"mysql -u$user -p$password -Bse \\\"drop database\", \$2, \"\\\"\"}" 

这是一个烂摊子,我知道。但它应该工作。

+0

您也可以在awk脚本中使用egrep部件。 '时间mysqlshow -u $用户-p $密码| awk“!/ information_schema | performance_schema/{print \”mysql -u $ user -p $ password -Bse \\\“drop database \”,\ $ 2,\“\\\”\“}”' – tripleee

0

$ 2需要传递给awk而不被shell解释。

用单引号包围$ 2。