Re: [OT] Duda siguiendo curso: Caracteres de escape
El Wed, 21 Aug 2013 20:23:04 +0200, Eduardo Rios escribió:
> El 21/08/13 16:41, Camaleón escribió:
>
>> Eh, pero el ejercicio es para que lo hagas tú.
>
> Ya, lo he hecho, pero no comprendo las salidas. Alguna que otra creo que
> si, pero me pierdo con tantas \\\\
>
> Con echo -e \n veo que solo muestra una n
Correcto, aquí el carácter "\" está siendo interpretado por el intérprete
de comandos (bash) que usa la barra invertida como indicador de escape.
No actúa la opción "-e" porque "\n" no está entrecomillado y bash no lo
interpreta como una cadena por lo que mantiene el valor literal del
siguiente carácter, en este caso la letra "n".
Si asignas valores a una variable se entiende mejor:
sm01@stt008:~$ test=hola; echo -e $test; echo -e \$test
hola
$test
Al poner delante "\" el carácter "$" pierde su función (valor de
variable), y verás que en este ejemplo es indiferente el uso del
modificador "-e".
> Con echo -e \\n entiendo que interpreta \n, que es un INTRO, es decir,
> línea nueva, pero a partir de ahí, me pierdo.
Pues básicamente es lo mismo, pero aquí ya entra en juego la opción "-e":
bash interpreta la primera barra invertida como carácter de escape y
debería modificar el comportamiento de la segunda pero no lo hace porque
se trata de un indicador de nueva línea ("\n"), y este caso es
precisamente una excepción.
> Y ni aún viendo lo que hace la shell con set -x, lo pillo.
Sirve para depurar los scripts que se ejecutan para ver lo que sucede
tras las bambalinas (ver qué valores toma una variable en tiempo de
ejecución, detectar bucles mal cerrados o errores de programación,
etc...), nada más.
Por ejemplo:
sm01@stt008:~$ set -x; echo -e \n; echo -e \\n; echo "fin"
+ set -x
+ echo -e n
n
+ echo -e '\n'
+ echo fin
fin
Puedes apreciar cómo interpreta bash el combo "\n" en cada caso (primero
lo ignora y después lo toma como literal y ejecuta la nueva línea).
>> Lo del "set -x" es sólo para que veas lo que realmente está ejecutando
>> el intérprete, nada más.
>
> Ya, pero sigo sin comprender el resultado...
¿Mejor? :-)
Aunque oye, yo tampoco soy gurú de bash, siempre tengo que estar mirando
manuales cuando quiero escribir una simple línea de código, así que lo
que he explicado más arriba es el "modo simplón", conviene consultar
siempre documentación "acreditada":
http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html
http://www.gnu.org/software/bash/manual/html_node/index.html#SEC_Contents
>> Te daré sólo una pista: comillas simples, comillas dobles, significado.
>
> Con las comillas simples se interpreta todo tal cual está escrito, es
> decir, la shell no expande nada.
>
> Con las comillas dobles, no se interpretan el asterisco (*), la
> interrogación (?) ni espacios en blanco, pero si lo hacen $, las
> comillas graves (`) y otros.
Sí, por ahí va la cosa.
>> Pero antes de nada conviene ejecutar un "echo $SHELL".
>
> edurios@debian:~$ echo $SHELL
> /bin/bash
> edurios@debian:~$
Vale, porque cada shell (incluso la misma shell pero distintas versiones)
puede usar su propias opciones/configuraciones y lo que sirve para una no
está disponible en otra.
Saludos,
--
Camaleón
Reply to: