De man bash:
CONDITIONAL EXPRESSIONS
[...]
-a file
True if file exists.
[...]
-e file
True if file exists.
- Entonces, ¿cuál es la diferencia entre
[ -a $FILE ]y[ -e $FILE ], si hay alguno? - Si no hay una diferencia real, ¿por qué existen dos banderas con el mismo propósito?

Respuestas:
En
bash, con el contexto de dos argumentostestcomando,-a filey-e fileson los mismos. Pero tienen alguna diferencia, porque-atambién es un operador binario.-ePOSARIO define unario, pero-ano lo es unario. POSIX solo define-abinarios (Ver prueba POSIX).POSIX define tres argumentos de
testcomportamiento:Entonces
-atambién conduce a un resultado extraño:-ase considera como operador binario en el contexto de tres argumentos. Consulte la pregunta frecuente Bash E1 . POSIX también menciona que-ase obtiene de KornShell, pero se cambió más tarde-eporque es confuso entre-abinario y-aunario.-abinario también se marca como obsoleto, porque conduce a una expresión ambigua, que tiene más de 4 argumentos. Con esta expresión de> 4 argumentos, POSIX define que el resultado no está especificado.fuente
No hay diferencia en absoluto.
En línea
505-507entest.cla versión bash4.2.45(1)-release:Eso indica que no hay una diferencia real entre ambas banderas.
Ver la respuesta de gnouc .
fuente
-aes un operador booleano (y) en bash, parece propenso a errores agregar este significado adicional que es completamente redundante; Supongo que está más relacionado con la compatibilidad con alguna otra implementación y / o compatibilidad con versiones anteriores que no tenían .-e-ay-obooleanos para[ test ]. Pero algunos shells (comobash) apestaban al distinguir un argumento de un operador y los[ test ]resultados no eran confiables. Desde entonces, POSIX ha requerido que cualquier shell compatible maneje al menos 4 argumentos dentro de los[ test ]corchetes.La mejor respuesta que he encontrado es esta, de una pregunta de StackOverflow:
fuente