Buscar..


Espacio en blanco al asignar variables

El espacio en blanco importa cuando se asignan variables.

foo = 'bar' # incorrect
foo= 'bar'  # incorrect
foo='bar'   # correct

Los dos primeros darán como resultado errores de sintaxis (o peor, la ejecución de un comando incorrecto). El último ejemplo establecerá correctamente la variable $foo en el texto "barra".

Falta la última línea en un archivo

El estándar de C dice que los archivos deben terminar con una nueva línea, por lo que si EOF aparece al final de una línea, es posible que algunos comandos no pasen por alto esa línea. Como ejemplo:

$ echo 'one\ntwo\nthree\c' > file.txt

$ cat file.txt
one
two
three

$ while read line ; do echo "line $line" ; done < file.txt
one
two

Para asegurarse de que esto funcione correctamente en el ejemplo anterior, agregue una prueba para que continúe el ciclo si la última línea no está vacía.

$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt
one
two
three

Los comandos fallidos no detienen la ejecución del script

En la mayoría de los lenguajes de script, si falla una llamada de función, puede lanzar una excepción y detener la ejecución del programa. Los comandos de Bash no tienen excepciones, pero sí tienen códigos de salida. Sin embargo, un código de salida distinto de cero indica un error, un código de salida distinto de cero no detendrá la ejecución del programa.

Esto puede llevar a situaciones peligrosas (aunque se admiten) como las siguientes:

#!/bin/bash
cd ~/non/existent/directory
rm -rf *

Si el cd -ing a este directorio falla, Bash ignorará el error y pasará al siguiente comando, limpiando el directorio desde donde ejecutó el script.

La mejor manera de lidiar con este problema es hacer uso del comando set :

#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *

set -e le dice a Bash que salga de la secuencia de comandos inmediatamente si algún comando devuelve un estado distinto de cero.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow