J'ai des problèmes avec les personnages qui échappent à Bash. J'aimerais échapper aux guillemets simples et doubles lors de l'exécution d'une commande sous un autre utilisateur. Aux fins 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 basculer vers un autre utilisateur:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Bien sûr, cela ne produit pas le bon résultat.
shell
quoting
escape-characters
m33lky
la source
la source
bash
est bien sur le chemin de me rendre fou.Réponses:
Vous pouvez utiliser la syntaxe littérale de chaîne suivante:
De
man bash
la source
Dans un shell POSIX, en supposant que dans votre chaîne, il n'y a pas de développement de variable, de commande ou d'historique, et il n'y a pas de saut de ligne, suivez ces recommandations de base:
Pour citer une chaîne générique avec des guillemets simples, procédez comme suit:
Remplacez toute séquence de caractères sans guillemets ayant la même séquence, avec des guillemets simples ajoutés et finis:
'aaa' ==> ''aaa''
Echappez avec une barre oblique inverse chaque caractère guillemet simple préexistant :
' ==> \'
en particulier,
''aaa'' ==> \''aaa'\'
Pour citer une chaîne générique avec des guillemets, procédez comme suit:
Ajoutez des guillemets doubles de début et de fin:
aaa ==> "aaa"
Echappez-vous avec une barre oblique inverse pour chaque caractère guillemet double et pour chaque caractère barre oblique inversée:
" ==> \", \ ==> \\
Quelques exemples:
afin que votre exemple puisse être développé avec ce qui suit:
la source
Exemple simple d'écriture de citations dans un shell:
Cela se fait en finissant un déjà ouvert (
'
), en plaçant un échappé (\'
), puis en en ouvrant un autre ('
).Alternativement:
Cela se fait en finissant un déjà ouvert (
'
), en plaçant quote dans un autre quote ("'"
), puis en en ouvrant un autre ('
).Connexe: Comment échapper à des guillemets simples dans des chaînes à une seule citation? à stackoverflow SE
la source
La réponse acceptée fonctionne pour une citation simple (un niveau):
Pour que la commande présentée fonctionne, vous devez citer deux fois.
Ce script pourrait faire tout le travail:
Exécutez le script pour obtenir:
La première ligne fonctionne pour un écho simple:
La deuxième ligne fonctionnera pour la commande à double guillemet:
la source
echo 'Je suis un étudiant' ne fonctionne pas. Mais les travaux suivants:
echo $ 'Je suis un étudiant' De la page de manuel de bash:
Un seul guillemet ne peut pas apparaître entre guillemets, même s'il est précédé d'une barre oblique inverse. .... Les mots de la forme $ 'chaîne' sont traités spécialement. Le mot se développe en chaîne, avec les caractères d'échappement avec une barre oblique inversée remplacés comme spécifié par la norme ANSI C.
la source