J'ai besoin d'une commande bash qui convertira une chaîne en quelque chose qui est échappé. Voici un exemple:
echo "hello\world" | escape | someprog
Où la commande d'échappement "hello\world"
entre "hello\\\world"
. Ensuite, someprog peut utiliser "hello\\world"
comme il s'y attend. Bien sûr, ceci est un exemple simplifié de ce que je vais vraiment faire.
Réponses:
Dans Bash:
par exemple:
Cela pourrait également être utilisé via des variables:
la source
%q
été brisé pendant plus d'une décennie jusqu'à environ 2012. Il a eu des problèmes avec~
. Il existe également des one-liners sed portables stackoverflow.com/a/20053121/1073695a='abc$def":'; printf '%q\n' "$a"
donneabc\$def\":
(le signe dollar est échappé). C'est Bash 4.3 (j'ai obtenu le même résultat dans Bash 3.2). Quelle version utilisez-vous?printf "%q" 'he$l&lo\world'
printf '%q\n' text
cite le texte aubash
format (et pour la locale actuelle), de sorte que cela ne fonctionnerait que dans le cas de l'OP s'ilsomeprog
avait exactement la même syntaxe de citation quebash
ce qui est hautement improbable.Pure Bash, utilisez la substitution de paramètres:
la source
Vous pouvez utiliser perl pour remplacer divers caractères, par exemple:
Selon la nature de votre évasion, vous pouvez enchaîner plusieurs appels pour échapper aux personnages appropriés.
la source