Ошибка входа в систему при замене команд Bash Mysql

Ошибка входа в систему при замене команд Bash Mysql

Версии Bash и MySQL:

GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

У меня есть скрипт bash, который пытается захватить результат запроса MySQL в переменную, используя подстановку команд с паролем MySQL в качестве переменной, содержащей знак доллара, и независимо от того, какой способ я пробую, он всегда либо не проходит аутентификацию с сообщением об отказе в доступе, либо запрос возвращает текст команды MySQL help. Я перепробовал десятки различных комбинаций обоих типов подстановки команд и экранирования символов, пока коровы не придут домой. Вот пример:

PASS='pass$word'; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";

Это вернет сообщение «Доступ запрещен для пользователя»...

PASS='pass$word'; RESULT=`mysql -u user -p\'${PASS}\' -h RemoteHostName DBName -e \"select count\(*\) from TableName\;\"`; echo "${RESULT}";

Это вернет текст справки MySQL.

Любая помощь будет высоко оценена, заранее спасибо.

решение1

Ответ val0x00ff был правильным в разделе комментариев выше

RESULT=$(mysql -u user -p "${PASS}" -h RemoteHostName DBName -e "select count(*) from TableName;")

решение2

Вам нужно экранировать значение пароля, а не его использование:

PASS="pass\$word"; RESULT=`mysql -u user -p'${PASS}' -h RemoteHostName DBName -e "select count(*) from TableName;"`; echo "${RESULT}";

Поскольку все, что находится после $, интерпретируется как ссылка на переменную с именем $word

[user@host ~]$ echo "pass$word"
pass
[user@host ~]$ echo "pass\$word"
pass$word

Связанный контент