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 幫助命令文字。我已經嘗試了數十種不同的命令替換和轉義字元組合,直到牛回家。這是一個例子:
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