переменные в awk - PullRequest
       10

переменные в awk

0 голосов
/ 08 октября 2011

У меня есть следующая строка в моем сценарии оболочки.

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 не делает. Я пытался добавить двойные и одинарные кавычки с и без escape-символов \, но это не сработало.

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

Вы должны убедиться, что $user и $password заключены в двойные кавычки (") или ничем, и , как @jkerian упомянул , что $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 голосов
/ 08 октября 2011

что $ 2 нужно передать awk без интерпретации оболочкой.

Окружите 2 доллара одинарными кавычками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...