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