Подтвердить что ты не робот

Разница между if -e и if -f

У меня есть простой вопрос, но я не мог найти ответа на него. Есть два переключателя для условия if, которые проверяют файл, -e и -f. Какая разница между этими двумя?

4b9b3361

Ответ 1

Смотрите: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Я считаю, что это не "если переключатели", а скорее "тестовые переключатели" (потому что вы должны использовать их внутри [] скобок.

Но разница заключается в следующем:

[ -e FILE ] Истина, если FILE существует.

Это вернет true для /etc/hosts и /dev/null.

[ -f FILE ] Истина, если FILE существует и является обычным файлом. Это вернет true для /etc/hosts и false для /dev/null (потому что это не обычный файл).

Ответ 2

$ man bash
       -e file
              True if file exists.
       -f file
              True if file exists and is a regular file.

Обычный файл - это не каталог /symlink/socket/device и т.д.

Ответ 3

-e проверяет любой объект файловой системы; -f проверяет только обычный файл.

Ответ 4

Оператор if фактически использует программу "test" для тестов. Вы можете написать, если утверждения два пути:

if [ -e filename ];

или

if test -e filename;

Если вы это знаете, вы можете легко проверить справочную страницу для "теста", чтобы узнать значения различных тестов:

man test