У меня есть простой вопрос, но я не мог найти ответа на него. Есть два переключателя для условия 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