martes, 18 de abril de 2017

Comillas perdidas

Si editamos nuestro script y eliminamos las comillas finales del argumento que sigue al primer comando echo:

#!/bin/bash

# trouble: script to demonstrate common errors

number=1

if [ $number = 1 ]; then
    echo "Number is equal to 1.
else
    echo "Number is not equal to 1."
fi

vemos lo que ocurre:

[me@linuxbox ~]$ trouble
/home/me/bin/trouble: line 10: unexpected EOF while looking for matching `"'
/home/me/bin/trouble: line 13: syntax error: unexpected end of file

Genera dos errores. Curiosamente, los números de línea reportados no son de donde se han eliminado las comillas, si no que están mucho más adelante en el programa. Podemos ver por qué, si seguimos el programa tras las comillas perdidas. bash continuará buscando las comillas de cierre hasta que encuentra unas, lo que ocurre inmediatamente tras el segundo comando echo. bash se queda muy confundido tras esto, y la sintaxis del comando if se rompe porque la sentencia fi está ahora dentro de una cadena entrecomillada (pero abierta).

En scripts largos, este tipo de errores pueden ser algo difíciles de encontrar. Ayudará usar un editor con resaltado sintáctico. Si está instalada la versión completa de vim, puede activarse el resaltado sintáctico introduciendo el comando:

:syntax on

No hay comentarios:

Publicar un comentario