martes, diciembre 14, 2010

Escapes avanzados en el shell

Se le llama escapar a la acción de enviar un caracter especial literalmente (y en algunos casos viceversa). Por ejemplo el bien conocido "\n" que representa un avance de línea, y el subsecuente "\\" que representa un backslash.

Estando en el shell estamos acostumbrados a dos tipos de cadenas: "entre comillas dobles" y 'entre comillas sencillas'. La diferencia principal que notamos en el shell es que "$HOME" imprimirá tu directorio home, pero '$HOME' imprimirá $HOME literalmente; y que los escapes con backslash funcionan en las dobles y no en las sencillas.

Es importante tener en cuenta que las comillas no definen una cadena. Lo que hacen es cambiar el modo de interpretación y ayudan a limitar el token (elemento). Es válido escribir /home/rat/"web service"/uno, por ejemplo.

¿Qué pasa si quieres escapar comillas dentro de comillas?

El caso más sencillo es "\"", entonces puedes decir "dijo \"sí\"". Pero si quieres escapar sencillas la cosa se complica, pues '\'' no funciona (el backslash es literal en las sencillas).

Me dio vueltas en la cabeza por meses, se hace así: ''"'"''. Entonces "I'm here" sería 'I'"'"'m here'.

Parece anti-intuitivo al principio, pero si consideras las reglas tiene un poco más de sentido que '''' (tipo SQL), y es más flexible. No quiero ni pensar cómo interactúa eso con ``... pero eventualmente será necesario.

No hay comentarios.:

Publicar un comentario