Tengo el siguiente fragmento de código en un archivo de script:
if [ -f $FILEPATH ] ; then
cp $FILEPATH ~/some/other/dir
fi
Ahora, debido a un error en este mismo archivo de script, algunas líneas sobre este fragmento de código, la variable $ FILEPATH no recibe un valor y no está definido, por lo que lo que realmente se ejecuta es:
if [ -f ] ; then
cp $FILEPATH ~/some/other/dir
fi
En esta situación esperaría que esta pruebaarroje un error (porque no hay ningún argumento para -f) o para devolver falso (porque busca un archivo sin nombre), pero la prueba devuelve verdadero y el contenido de la condición if se ejecuta.
Me pregunto cómo bash interpreta esta prueba para que se vuelva verdadera en este escenario. ¿Cuál es la prueba real realizada?
Estoy ejecutando la versión 4.3.48 de bash en Ubuntu
Respuestas
2 para la respuesta № 1Eso es Comportamiento POSIX Para el test
mando:
El comando test
, con
1 argumento:
Salga de verdadero (0) si $ 1 no es nulo; de lo contrario, salga falso.
Por lo tanto test -f
(o equivalente, [ -f ]
) se llama con un argumento no nulo, por lo que devuelve true
.