Pourquoi tester avec -f dans bash renvoie true si aucun argument n’est fourni au test?

J’ai le morceau de code suivant dans un fichier script:

if [ -f $FILEPATH ] ; then cp $FILEPATH ~/some/other/dir fi 

Maintenant, à cause d’une erreur dans ce même script, des lignes au-dessus de ce code, la variable $ FILEPATH ne reçoit pas de valeur et n’est pas définie, donc ce qui est réellement exécuté est:

 if [ -f ] ; then cp $FILEPATH ~/some/other/dir fi 

Dans ce cas, je m’attendrais à ce que ce test génère une erreur (car il n’y a pas d’argument à -f) ou renvoie false (car il recherche un fichier sans nom), mais le test renvoie true et le contenu de la condition if sont exécutés.

Je me demande comment bash interprète ce test pour qu’il soit vrai dans ce scénario. Quel est le véritable test effectué?

Je cours bash version 4.3.48 sur Ubuntu

C’est le comportement POSIX pour la commande de test :

Le test commande, avec

1 argument:

Quittez true (0) si $ 1 n’est pas nul; sinon, quittez false.

Par conséquent, test -f (ou, de manière équivalente, [ -f ] ) est appelé avec un argument non nul, donc il renvoie true .