Você entendeu mal alguns mecanismos.
Quando você coloca uma frase entre aspas simples, ou seja, '
, não há expansão e você não precisa escapar do $
s. Expansão significa que existem caracteres especiais como $
, que, se não forem removidos, acionam procedimentos especiais de shell. Então, quando você suprime a expansão com aspas simples, não precisa escapar delas. Assim use:
mysql -u root -p -e 'some statement that change a pa$$word'
Quanto a printf
, o que você fez não está sendo verificado. Chamar com %q
adiciona as barras invertidas ao $
s.
Se algo não funcionou, foi porque $$
foi alterado para o PID (ID do processo) do shell. Isso é o que o shell faz dessa combinação de caracteres especiais em seu contexto normal, ie. quando eles não são escapados ou colocados entre aspas simples.