我的shell脚本中有以下行。
time mysqlshow -u$user -p$password | egrep -v 'information_schema|performance_schema' | awk '{print "mysql -u$user -p$password -Bse \"drop database", $2, "\""}'
第一个$ user正在更改为username变量。但awk声明中的那个没有。我尝试使用和不使用转义字符添加双引号和单引号\但它不起作用。
答案 0 :(得分: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, \"\\\"\"}"
我知道这是一团糟。但它应该有用。
答案 1 :(得分:0)
$ 2需要传递给awk而不被shell解释。
用单引号围绕2美元。