COMILLAS Y MAS COMILLAS

 

Uno de los mayores quebraderos de cabeza de muchos usuarios en UNIX es el tema de las comillas, que significan y cuando se usan. A continuación veremos que no es tan complicado.

Existen los siguientes tipos:

Si queremos expresar unas comillas dobles dentro de la cadena las encerraremos entre un par de comillas simples y por el contrario si queremos expresar unas comillas simples las encerraremos entre comillas dobles. También se pueden expresar anteponiendo a las comillas el caracter "\" (back slash).

Por ejemplo:

$ A='cat prueba'
$ B="cat prueba"
$ C=´cat prueba´ 	# equivale a C=$(cat prueba)
$ echo $A
cat prueba
$ echo $B
cat prueba
$ echo $C
...
Contenido del archivo prueba
...
$ echo "$B"
cat prueba
$ echo '$B'
$B
$ echo "$A"
cat prueba
$ echo '$A'
$A

Se mostrará el contenido del archivo prueba, es decir, en la variable C, se ha almacenado el contenido de dicho archivo como resultado de la ejecución de un comando.

Como ejemplo consideremos el siguiente bucle:

for i in "a b c d e f g"
	do
		Comando1
		Comando2
		...
	done

Se realizará para cada elemento indicado en la lista. Si dicha lista es el contenido de un directorio, sería equivalente a:

for i in $(ls)				# mejor que for i in ´ls´
	do
		Comando1
		Comando2
		...
	done

Este segundo caso presenta la ventaja de ser independiente de los archivos que existan en el directorio, pues se recogerá cualquier modificación que se dé en dicho directorio, mientras que en el primer caso, el bucle se ceñirá a los archivos especificados, si no existen dará error, y si se genera alguno nuevo no se tendrá en cuenta.

Vamos a ver un ejemplo práctico bastante interesante. Muchos usuarios nuevos en UNIX se quejan de no saber en que directorio est%aacute;n y tener que ejecutar constantemente el comando pwd. Como sabemos, podemos poner como prompt del sistema lo que queramos, por lo que vamos a poner algo similar a lo que nos aparecía en DOS, el nombre del sistema y el directorio en que nos hallemos. Para ello debemos poner:

PS1='${HOSTNAME}:${PWD}> '

Si hubiésemos puesto " en lugar de ' funcionaría la primera vez, pero no se actualizaría al cambiar de directorio, pues las variables se interpretan la primera vez y nada más, PS1 contiene el valor de las variables ya interpretadas. En cambio, tal y como se ha definido, PS1 tiene como valor "${HOSTNAME}:${PWD}>" sin interpretar, pues como dijimos las variables no son interpretadas al usar ', y serán interpretadas cada vez que se muestre PS1, es decir, una vez que finaliza la ejecuciín de cada comando.