En bash, con el contexto de dos argumentos testcomando, -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:
3 argumentos:
Si $ 2 es un primario binario, realice la prueba binaria de $ 1 y $ 3.
Si $ 1 es '!', Niegue la prueba de dos argumentos de $ 2 y $ 3.
Si $ 1 es '(' y $ 3 es ')', realice la prueba unaria de $ 2. En los sistemas que no admiten la opción XSI, los resultados no se especifican si $ 1 es '(' y $ 3 es ')'.
De lo contrario, producir resultados no especificados.
Entonces -atambién conduce a un resultado extraño:
$ [ ! -a . ] && echo true
true
-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.
El -e primario, que posee una funcionalidad similar a la proporcionada por el shell C, se agregó porque proporciona la única forma para que un script de shell descubra si existe un archivo sin intentar abrir el archivo. Dado que las implementaciones pueden agregar tipos de archivos adicionales, un script portátil no puede usar:
prueba -b foo -o -c foo -o -d foo -o -f foo -o -p foo
para averiguar si foo es un archivo existente. En sistemas BSD históricos, la existencia de un archivo podría determinarse por:
prueba -f foo -o -d foo
pero no había una manera fácil de determinar que un archivo existente era un archivo normal. Una propuesta inicial usaba el KornShell -a primario (con el mismo significado), pero esto se cambió a -e porque había dudas sobre la alta probabilidad de que los humanos confundan el operador -a primario con el operador binario -a.
-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.