J'ai du mal à échapper des caractères dans bash. J'aimerais échapper aux guillemets simples et doubles lors de l'exécution d'une commande sous un autre utilisateur. Pour les besoins de cette question, disons que je veux faire écho à ce qui suit à l'écran :
'single quote phrase' "double quote phrase"
Comment puis-je échapper à tous les caractères spéciaux, si je dois également changer d'utilisateur :
sudo su USER -c "echo "'single quote phrase' "double quote phrase"""
Bien sûr, cela ne produit pas le bon résultat.
Réponse acceptée :
Vous pouvez utiliser la syntaxe littérale de chaîne suivante :
> echo $''single quote phrase' "double quote phrase"'
'single quote phrase' "double quote phrase"
Depuis man bash
Les mots de la forme $'string' sont traités spécialement. Le mot se développe
en chaîne, avec les caractères d'échappement avec barre oblique inversée remplacés comme spécifié par
la norme
ANSI C. Les séquences d'échappement antislash, si elles sont présentes, sont décodées comme suit :a alert (bell) b backspace e E an escape character f form feed n new line r carriage return t horizontal tab v vertical tab \ backslash ' single quote " double quote nnn the eight-bit character whose value is the octal value nnn (one to three digits) xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) cx a control-x character