Necesito un comando bash que convierta una cadena en algo que se escape. He aquí un ejemplo:
echo "hello\world" | escape | someprog
Cuando el comando de escape hace "hello\world"
en "hello\\\world"
. Entonces, someprog puede usarlo "hello\\world"
como espera. Por supuesto, este es un ejemplo simplificado de lo que realmente haré.
Respuestas:
En Bash:
por ejemplo:
Esto también podría usarse a través de variables:
fuente
%q
estuvo roto durante más de una década hasta aproximadamente el 2012. Tuvo problemas con~
. También hay una sola línea sed portátil stackoverflow.com/a/20053121/1073695a='abc$def":'; printf '%q\n' "$a"
da como resultadoabc\$def\":
(se escapa el signo de dólar). Este es Bash 4.3 (obtuve el mismo resultado en Bash 3.2). Qué versión estás usando?printf "%q" 'he$l&lo\world'
printf '%q\n' text
cita el texto enbash
formato (y para la configuración regional actual), por lo que solo funcionaría en el caso del OP sisomeprog
tuvieran exactamente la misma sintaxis citasbash
que es muy poco probable.Pure Bash, utilice la sustitución de parámetros:
fuente
Puede usar perl para reemplazar varios caracteres, por ejemplo:
Dependiendo de la naturaleza de su escape, puede encadenar múltiples llamadas para escapar de los personajes adecuados.
fuente