web-dev-qa-db-fra.com

Commande pour échapper à une chaîne dans bash

J'ai besoin d'une commande bash qui convertira une chaîne en un élément échappé. Voici un exemple:

echo "hello\world" | escape | someprog

Où la commande d'échappement fait "hello\world" en "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.

83
User1

Dans Bash:

printf "%q" "hello\world" | someprog

par exemple:

printf "%q" "hello\world"
hello\\world

Cela pourrait aussi être utilisé avec des variables:

printf -v var "%q\n" "hello\world"
echo "$var"
hello\\world
139

Pure Bash, utilise la substitution de paramètre:

string="Hello\ world"
echo ${string//\\/\\\\} | someprog
7
Fritz G. Mehner

Vous pouvez utiliser Perl pour remplacer différents caractères, par exemple:

$ echo "Hello\ world" | Perl -pe 's/\\/\\\\/g'
Hello\\ world

Selon la nature de votre échappement, vous pouvez chaîner plusieurs appels pour échapper aux caractères appropriés.

0