Commande pour échapper à une chaîne en bash
J'ai besoin d'une commande bash qui vous permet de convertir une chaîne de caractères à quelque chose qui a échappé. Voici un exemple:
echo "hello\world" | escape | someprog
Où la commande d'échappement fait "hello\world"
en "hello\\\world"
. Ensuite, someprog pouvez utiliser "hello\\world"
qu'il attend. Bien sûr, c'est un exemple simplifié de ce que je vais vraiment faire.
- Quelle est la nature de la fuite? En d'autres termes, quels sont les caractères doivent être échappés? Vous êtes à la recherche pour un C++-style escape (où onglets sont remplacés par \t, les retours à la ligne avec \n, devis avec \", etc.)? Il est difficile d'aider sans le problème étant bien définis.
- double possible de echo que shell s'échappe arguments
- Cette question pourrait signifier une douzaine de choses différentes. Au lieu de nous faire deviner, il serait utile si vous préciser exactement quel genre de s'en échapper, vous êtes à la recherche pour.
- La question est spécifique à l'utilisation de \\ pour \. Il est accepté de répondre.
Vous devez vous connecter pour publier un commentaire.
Dans Bash:
par exemple:
Cela pourrait être utilisé par des variables trop:
%q
a été cassé pendant plus d'une décennie, jusqu'en 2012. Il a eu des problèmes avec~
. Il existe également des portable sed one-liners stackoverflow.com/a/20053121/1073695abc\$def\":
(le signe dollar s'est échappé). C'est Bash 4.3 (j'ai obtenu le même résultat en Bash 3.2). Quelle version utilisez-vous?printf "%q" 'he$l&lo\world'
printf '%q\n' text
cite le texte dansbash
format (et pour les paramètres régionaux en cours), de sorte que ne pouvait fonctionner que dans le cas des OP cas si leursomeprog
eu exactement la même citant syntaxe quebash
ce qui est hautement improbable.Pur Bash, utiliser le paramètre de substitution:
Vous pouvez utiliser perl pour remplacer des caractères différents, par exemple:
Selon la nature de votre escapade, vous pouvez chaîner les appels d'échapper à la bonne caractères.