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.
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
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.
Hay otras razones para desear poner parámetros encerrados entre comillas simples o dobles: si queremos el literal exacto del contenido de una variable.
Si una variable (por ejemplo, porque se le ha asignado la salida
estándar de un programa) contiene saltos de línea, y no ponemos
comillas, entonces el intérprete lo entenderá como que esos
saltos de línea son separadores de parámetros, y por ejemplo el
echo
los separará con un espacio. Tendremos un problema
parecido si ponemos más de un espacio para separar los
parámetros:
x='10 y 5 espacios'
echo $x # Saldrá en pantalla '10 y 5 espacios'
echo `$x' # Saldrá en pantalla `$x'
echo "$x" # Saldrá en pantalla '10 y 5 espacios'
¿Queda claro? Pues eso.