Ya no busques más en internet porque estás al espacio necesario, contamos con la respuesta que necesitas sin problema.
Solución:
Su echo "$a"
imprime “hola”, luego vuelve al principio de la línea (que es lo que r
hace), imprime “otra vez”, vuelve de nuevo, imprime “george”, vuelve de nuevo y va a la línea siguiente (n
). Todo es perfectamente normal, pero como señala Chepner, no tiene nada que ver con Bash: r
y n
son interpretados por la terminal, no por Bash (razón por la cual obtienes el resultado completo cuando canalizas el comando a od
).
Puedes ver esto mejor con
$ a=$(printf "hellooooor again,rgeorgern")
$ echo "$a"
ya que eso dejará el final del texto sobrescrito:
georgen,o
Sin embargo, no puede usar eso para ocultar comandos, solo su salida (y solo si puede estar seguro de sobrescribir con suficientes caracteres), a menos que use eval
como muestra (pero usando eval
generalmente no se recomienda). Un truco más peligroso es usar CSS para enmascarar comandos destinados a ser copiados y pegados desde sitios web.
En el mundo Unix, un retorno de carro (comúnmente codificado como r
en lenguajes de programación) es un carácter de control normal. Puede tener retornos de carro dentro de una línea de texto, como cualquier otro carácter además de un avance de línea (también llamado nueva línea), que marca el final de una línea.
En particular, en un script bash, un retorno de carro es un carácter constituyente de una palabra común, como letras y dígitos. Cualquier efecto especial del retorno de carro proviene de la terminal, no del caparazón.
Un retorno de carro es un carácter de control. Cuando lo imprime en una terminal, en lugar de mostrar un glifo, la terminal realiza algún efecto especial. Para un retorno de carro, el efecto especial es mover el cursor al principio de la línea actual. Por lo tanto, si imprime una línea que contiene un retorno de carro en el medio, el efecto es que la segunda mitad se escribe sobre la primera mitad.
Varios otros caracteres de control tienen efectos especiales: el carácter de retroceso mueve el cursor hacia la izquierda una posición. El carácter de campana hace que el terminal emita un sonido o llame la atención del usuario. El personaje de escape inicia una secuencia de escape que puede tener todo tipo de efectos especiales.
Si muestra una salida que no es de confianza, debe borrar o escapar de los caracteres de control. No sólo los retornos de carro, sino también varios otros, en particular el carácter de escape, que puede causar todo tipo de efectos negativos. Consulte ¿Puede “catear” un archivo ser un riesgo potencial para la seguridad? y ¿Cómo evitar ataques de secuencia de escape en terminales? para más sobre el tema.
Reseñas y calificaciones del post
Recuerda que tienes el privilegio valorar este enunciado si te ayudó.