У файлі сценарію у мене є такий фрагмент коду:
if [ -f $FILEPATH ] ; then
cp $FILEPATH ~/some/other/dir
fi
Тепер через помилку в цьому самому файлі сценарію деякі рядки над цим фрагментом коду змінна $ FILEPATH не отримує значення і не визначена, тому те, що дійсно виконується, це:
if [ -f ] ; then
cp $FILEPATH ~/some/other/dir
fi
У цій ситуації я б очікував цього тестуабо кинути помилку (тому що немає аргументу до -f), або повернути помилкове (тому що він шукає файл без імені), але тест повертає істину і вміст умови if виконується.
Мені цікаво, як Баш інтерпретує цей тест, щоб повернути правду в цьому сценарії. Що таке справжнє тест?
У Ubuntu я використовую bash версії 4.3.48
Відповіді:
2 для відповіді № 1Це те, що POSIX поведінка для test
команда:
Команда test
, с
1 аргумент:
Вийдіть true (0), якщо $ 1 не є нульовим; в іншому випадку вийдіть помилково.
Отже test -f
(або, що еквівалентно, [ -f ]
) викликається одним ненульовим аргументом, тому він повертається true
.