Em primeiro lugar, os dois canonizam os nomes dos arquivos que incluem:
-
Convertendo todos os caminhos relativos para caminhos absolutos
-
Convertendo todos os links simbólicos para caminhos reais com hardlink na hierarquia do sistema de arquivos
As principais diferenças são:
-
-f
canonicalizará um caminho que pode conter uma parte do sistema de arquivos inexistente apenas por último, por ex. um diretório ou um arquivo, status de saída diferente de zero, caso contrário; por outro lado,-e
só funcionará se todos os componentes existirem no sistema de arquivos, status de saída diferente de zero, caso contrário -
Qualquer
/
à direita será ignorado em-f
,-e
tratará/
como um diretório
Então, praticamente:
-
Use
-e
quando quiser ter certeza de que algum caminho deve existir, por exemplo, você precisa do status de saída para fazer qualquer outra operação lógica, umif
-else
teste precisamente -
Use
-f
quando você não quiser que o caminho exista estritamente agora, mas você precisará do caminho completo mais tarde. você deseja criar o arquivo resolvido posteriormente quando um processo estiver em execução ou um sistema de arquivos estiver montado e assim por diante. -
Use
-e
com um/
à direita para verificar explicitamente uma entrada de diretório, pois-f
ignora o/