/ / Prečo testovanie s -f v bash vráti true, keď k testu nie sú poskytnuté žiadne argumenty? [duplikát] - bash, shell, ubuntu, skriptovanie

Prečo testovanie s -f v návrhoch bash je pravdivé, keď nie sú k testu poskytnuté žiadne argumenty? [duplicitné] - bash, shell, ubuntu, skriptovanie

V súbore skriptu mám nasledujúcu časť kódu:

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

Teraz kvôli chybe v rovnakom súbore skriptu niektoré riadky nad touto časťou kódu premenná $ FILEPATH nedostáva hodnotu a je nedefinovaná, takže to, čo sa skutočne vykoná, je:

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

V tejto situácii by som očakával, že tento test budebuď vyhodiť chybu (pretože neexistuje žiadny argument pre -f), alebo vrátiť hodnotu false (pretože vyhľadáva súbor bez názvu), ale test vráti hodnotu true a vykoná sa obsah podmienky if.

Zaujímalo by ma, ako bash interpretuje tento test tak, aby sa v tomto scenári vrátil k pravdivosti. Aký je skutočný test?

Používam bash verziu 4.3.48 na Ubuntu

odpovede:

2 pre odpoveď č. 1

To je Správanie POSIX pre test príkaz:

Príkaz test, s

1 argument:

Ak nie je $ 1 null, ukončite hodnotu true (0); v opačnom prípade ukončite hodnotu false.

z toho dôvodu test -f (alebo ekvivalentne [ -f ]) je volaný s jedným nenulovým argumentom, takže sa vráti true.