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
私は、MySQL パスワードをドル記号を含む変数としてコマンド置換を使用して変数に MySQL クエリの結果をキャプチャしようとする bash スクリプトを持っていますが、どの方法を試しても、アクセス拒否メッセージで認証に失敗するか、クエリが MySQL ヘルプ コマンド テキストを返します。私は、コマンド置換と文字のエスケープの両方の異なる組み合わせを何十通りも試しました。次に例を示します。
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