2011-10-08 89 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。