Ni quito ni borro.
Me ha resultado estupendo. Lo he entendido!!
On 4/25/06, Comventia Express
*Comillas*
El uso de las comillas en la programación en shell es un tema bastante importante. En los lenguajes de alto nivel normalmente las comillas sólo se utilizan para las ristras, y no necesitan un aprendizaje especial para usarlas: simplemente saber (en el lenguaje C, por ejemplo) que las comillas simples son caracteres y que las comillas dobles requieren reservar memoria, porque son ristras, o sea, punteros a caracteres.
*Tres tipos de comillas*
En la programación en shell en UNIX hay tres tipos de comillas útiles: La comilla simple ('), la comilla doble (") y la comilla invertida (`). Cada una tiene un propósito diferente, y se deben saber usar todas bien.
La comilla simple (') sirve para coger literales. Es importante darse cuenta de que algo encerrado entre comillas simples siempre es un solo parámetro, aunque sea una ristra vacía ('').
La comilla doble sirve para sustituir lo que hay dentro (valores de variables, caracteres especiales), pero después de sustituir queremos tratarlo como si estuviera encerrado entre comillas simples. Esto es útil cuando, por ejemplo, tenemos que dar un parámetro a un programa, pero ese parámetro es leído del teclado y no sabemos si la ristra es vacía. Si nos tenemos que asegurar de que se trata como un parámetro, tendríamos que encerrarlo entre comillas simples (recordemos que '' sigue siendo un parámetro, aunque vacío), pero si lo encerramos entre comillas simples no se sustituirá la variable. La forma de hacerlo es encerrando la variable entre comillas dobles.
Veamos esto en el siguiente ejemplo:
x=100 y='500$x' echo $y # Esto enseñará `500$x' en pantalla y="500$x" echo $y # Esto enseñará `500100' en pantalla
aquí me ha pasado algo curioso. (Nota, estoy haciendo estas prácticas en cygwin, en windows, asi que en linux bien podría ser disitinto). Me he emocionado con esto, y me he dicho, `a ver si me sale multiplicar`: x=100 y="500 * $x" echo $y Y lo que me sale es algo muy feo, que viene del asterisco: echo * Application Data Bluetooth Software Configuración local Cookies Datos de programa Entorno de red Escritorio Favoritos GAN-GE~2.DOC Impresoras JCDSee.cfg Menú Inicio Mis documentos NTUSER.DAT NTUSER.DAT.LOG Nokia Phone Browser PUTTY.RND Plantillas Reciente SendTo TOSHIBA WLANProfiles XWin.exe.stackdump _viminfo amsn amsn_received geexbox-0 .98.7-en.i386.iso mplayer ntuser.ini workspace Qué demonios es el asterísco en Linux? (ya digo, esto me ha salido en cygwin con windows)
Las que quedan son las comillas invertidas (`). Estas se utilizan con órdenes, y se sustituyen por la salida del programa que está entre las comillas invertidas. Por ejemplo, si queremos almacenar en una variable el número de usuarios que hay actualmente en el sistema, podemos hacer
usuarios=`who | wc -l`
Por si queda alguna duda, who dice los usuario que hay en el sistema, poniendo uno en cada línea, y wc -l cuenta las líneas que tiene el texto que le entre por la entrada estándar, sacando el número resultante a la salida.
hth
Oh si, mucho. De verdad. Esto SI ha sido claro :-) Veamos si soy un alumno aventajado. Quiero hacer un script que me despierte con unas cancioncillas que guardo en un directorio, y lanzarlo con un cron. =========================== #!/bin/bash DIR=/home/miguel/musica canciones= `ls -la $DIR` mplayer $canciones =========================== Funcionaría este script? (en cuanto llegue a casa lo pruebo). El problema que veo es que al expandir el nombre de los ficheros en DIR, el nombre se va a cortar, ya que los ficheros tienen espacios en el título. :-? Cómo puedo hacer para que tome el nombre del fichero completo?? -- Saludos, miguel