SUSv3 говорит:
-f Не запрашивать подтверждение. Не пишите диагностические сообщения и не изменяйте состояние выхода в случае несуществующих операндов. Любые предыдущие вхождения опции -i должны игнорироваться.
Ubuntu 9.10 Если вы наберете rm, вы получите ошибку пропущенного операнда, то же самое с rm -r, но rm -f не выдает ошибки. -f должен быть «силой», а не «рассеивать ошибки»
SUSv3 говорит:
-f Не запрашивать подтверждение. Не пишите диагностические сообщения и не изменяйте состояние выхода в случае несуществующих операндов. Любые предыдущие вхождения опции -i должны игнорироваться.
-f, --force
игнорировать несуществующие файлы, никогда не запрашивать
игнорирование несуществующих файлов означает, что не будет ошибки, если нет файлов для удаления, что происходит, когда вы используете rm -f без указания файла (ов). Это ожидаемое поведение, насколько я знаю. Он не игнорирует все ошибки, но -f не требует, чтобы файл указывался в качестве операнда, поэтому нет ошибки для выброса.
Чтобы понять, почему параметр file действительно необязательный, вы должны учитывать, что во многих сценариях список удаляемых файлов хранится в переменной, а использование -f позволяет вам не заботиться о том, пуст ли список или нет. Вы можете просто сделать:
rm -f $FILES
из более громоздких
-z "$FILES" || rm $FILES
Поэтому логично, что параметр «игнорировать несуществующие файлы» не завершается ошибкой, если в командной строке не указан файл.