2012-04-18 31 views
21

Tengo una pregunta simple, pero no he podido encontrar ninguna respuesta. Hay 2 conmutadores para la condición if que verifican un archivo, -e y -f. ¿Cuál es la diferencia entre esos dos?Diferencia entre if -e y si -f

+0

@jww Es una pregunta sobre el bloque if en las secuencias de comandos bash; puede que no sea un lenguaje de programación, pero seguro que no lo llamaría fuera del tema. – Ahatius

+0

Bastante justo. Lo etiquetaron como tal; así que lo movió hacia la programación y lejos de "cómo uso este comando". Retractado – jww

Respuesta

34

Ver: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

creo que estos no "si los interruptores", más bien "interruptores de prueba" (porque hay que utilizarlos dentro de corchetes []

pero la diferencia es:.

[ -e FILE ] cierto si fichero existe.

Esto devolverá cierto tanto para /etc/hosts y /dev/null.

[ -f FILE ] Verdadero si FILE existe y es un archivo normal. Esto devolverá verdadero para /etc/hosts y falso para /dev/null (porque no es un archivo normal).

17
$ man bash 
     -e file 
       True if file exists. 
     -f file 
       True if file exists and is a regular file. 

un archivo normal es algo que no es un/enlace simbólico/socket/dispositivo de directorio, etc.

+0

Gracias por la respuesta. ¿Adivina que esto significa que para que -f se convierta en verdad, debe hacer referencia a un archivo que no es un enlace o algo así? – Ahatius

+0

Sí. Por lo general, tienen un '-' en el primer carácter de la salida ls -l. – jman

+0

Ok, muchas gracias! – Ahatius

3

-e cheques para cualquier tipo de objeto del sistema de ficheros; -fsolo busca un archivo normal.

1

La instrucción if en realidad utiliza el programa 'prueba' para las pruebas. Se puede escribir si las declaraciones de dos maneras:

if [ -e filename ]; 

o

if test -e filename; 

Si conoce esto, se puede comprobar fácilmente la página del manual de 'prueba' para averiguar el significado de las diferentes pruebas:

man test 
Cuestiones relacionadas