/ / ¿Por qué probar con -f en bash devuelve verdadero cuando no se proporcionan argumentos para la prueba? [duplicado] - bash, shell, ubuntu, scripting

¿Por qué probar con -f en bash devuelve verdadero cuando no se proporcionan argumentos para la prueba? [duplicado] - bash, shell, ubuntu, scripting

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 № 1

Eso 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.