
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