miércoles, 24 de junio de 2015

Expansión

Cada vez que escribes un comando y presionas la tecla enter, bash realiza varios procesos sobre el texto antes de llevar a cabo el comando. Hemos visto un par de casos de cómo una simple secuencia de caracteres, por ejemplo “*”, puede tener mucho significado para el shell. El proceso que hace que esto ocurra se llama expansión. Con la expansión, introduces algo y se expande en otra cosa antes de que el shell actúe sobre ello. Para demostrar qué queremos decir con esto, echemos un vistazo al comando echo. echo es un shell builtin que realiza una tarea muy simple. Muestra sus argumentos de texto en la salida estándar:

[me@linuxbox ~]$ echo this is a test
this is a test

Es muy sencillo. Cualquier argumento que pasemos a echo se muestra. Probemos otro ejemplo:

[me@linuxbox ~]$ echo *
Desktop Documents ls-output.txt Music Pictures Public Templates Videos

Pero, ¿qué ha pasado? ¿por qué echo no ha escrito “*”? Como recordarás de nuestro trabajo con comodines, el carácter “*” significa coincidencia con cualquier carácter en el nombre de archivo, pero lo que no hemos visto en nuestra conversación original es cómo hace eso el shell. La respuesta sencilla es que el shell expande el “*” en algo más (en este ejemplo, los nombres de los archivos que se encuentran en el directorio de trabajo actual) antes de que el comando echo se ejecute. Cuando presionamos la tecla enter, el shell automáticamente expande todos los caracteres en la línea de comandos antes de que el comando sea ejecutado, por lo que el comando echo no ve el “*”, sólo su resultado expandido. Sabiendo esto, podemos ver que echo se ha comportado como se esperaba.

No hay comentarios:

Publicar un comentario