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ď č. 1To 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
.