私はこれについてたくさんのスレッドを読んでいましたが、それらのどれもこの問題に対処しませんでした。
$
エスケープされたコンテンツが含まれているため、MySQLの動作が中断されるコマンドラインでMySQL式を実行する必要があります。
mysql -u root -p -e "some statement that change a pa$$word"
確認してもらいました。printf
printf "%q\n" 'pa$$word'
pa\$\$word
したがって、脱出する必要はありません。$
それ以外の場合、MySQLクエリに無効なパスワードが入力されます。
ベストアンサー1
あなたはいくつかのダイナミクスを誤解しました。
構文を一重引用符で囲むと'
、つまり拡張はなく、sをエスケープする必要はありません$
。拡張とは、たとえば特殊文字が存在する$
場合にエスケープされていない場合、特殊シェルプロセスがトリガーされることを意味します。したがって、単一引用符を使用して拡張を抑制する場合は、エスケープする必要はありません。したがって、以下を使用してください。
mysql -u root -p -e 'some statement that change a pa$$word'
に関しては、printf
あなたがしたことは検査ではありませんでした。呼び出すと、s%q
にバックスラッシュが追加されます$
。
何かがうまくいかない場合は、$$
シェルのPID(プロセスID)が変更されたためです。これは、シェルが通常の状況で特殊文字の組み合わせで実行する操作です。エスケープされていない、または一重引用符内に配置されていない場合。