[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: