Поместите результаты запроса командной строки mysql в переменную сценария bash

Мне очень трудно понять, как получить результаты запроса mysql в переменную сценария оболочки bash.

testDBName="some_database_name"
mysqlUser="root"
mysqlPassword="password"
mysqlCmd="/Applications/MAMP/Library/bin/mysql -u $mysqlUser -p $mysqlPassword -B -N"
cmdRes=$($mysqlCmd -e 'SHOW DATABASES LIKE "$testDBName"') #THIS IS THE TROUBLESOME LINE
if [ "$cmdRes" = "" ]; then
    echo "Table does not exist"
else
    echo "Table already exists"
fi

Строка, которая доставляет мне неприятности, это "cmdRes=...". Если я просто жестко запрограммирую имя таблицы, оно будет работать нормально, например:

cmdRes=$($mysqlCmd -e 'SHOW DATABASES LIKE "some_database_name"')

Но я не могу понять, как/почему/что происходит, когда у меня есть $variable внутри этой штуки. Основываясь на ответах на множество других похожих, но разных вопросов, я попытался поместить разные части строки в разные переменные, чтобы сократить цитирование, я пробовал одинарные кавычки, двойные кавычки, обратную косую черту, двойную одинарную- двойные кавычки, фигурные скобки, запуск eval и т. д., но ничего не работает.

Спасибо за любую помощь, которую вы можете предоставить.


person Jordan Lev    schedule 04.09.2011    source источник


Ответы (1)


Проблема в том, что оболочка ничего не раскрывает внутри одинарных кавычек (').

Одно из возможных решений:

cmdRes=$($mysqlCmd -e "SHOW DATABASES LIKE '$testDBName'")
person paulsm4    schedule 04.09.2011
comment
Подождите, я только что попробовал это без обратной косой черты, и это работает! Если вы отредактируете свой ответ, я отмечу его правильным (у меня нет прав на редактирование). Спасибо! - person Jordan Lev; 05.09.2011