2012-04-18 25 views
21

Ho una domanda semplice, ma non ho trovato nessuna risposta. Ci sono 2 interruttori per la condizione if che controlla un file, -e e -f. Qual è la differenza tra quei due?Differenza tra if -e e if -f

+0

@jww È una domanda sul blocco if in bash scripting - potrebbe non essere un linguaggio di programmazione, ma di certo non lo chiamerei fuori tema. – Ahatius

+0

Abbastanza giusto. L'hai etichettato come tale; quindi lo hai spostato verso la programmazione e lontano da "come si usa questo comando". Retratta. – jww

risposta

34

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

Credo quelli non sono "se gli interruttori", piuttosto "interruttori di prova" (perché bisogna usarli all'interno [] parentesi

ma la differenza è:.

[ -e FILE ] vero se file esiste.

Ciò restituirà vero sia per /etc/hosts e /dev/null.

[ -f FILE ] Vero se FILE esiste ed è un file normale. Restituisce true per /etc/hosts e false per /dev/null (perché non è un file normale).

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

un file regolare è qualcosa che non è una directory/link simbolico/zoccolo/dispositivo, ecc

+0

Grazie per la risposta. Suppongo che questo significhi che affinchè -f diventi vero, devi fare riferimento a un file che non è un link o qualcosa del genere? – Ahatius

+0

Sì. In genere hanno un '-' nel primo carattere di output ls -l. – jman

+0

Ok, grazie mille! – Ahatius

3

-e controlli per qualsiasi tipo di oggetto file system; -fsolo controlla un file regolare.

1

L'istruzione if utilizza effettivamente il programma "test" per i test. Si potrebbe scrivere se le dichiarazioni di due modi:

if [ -e filename ]; 

o

if test -e filename; 

Se conosci questa, si può facilmente controllare la pagina man per 'test' per scoprire il significato dei diversi test:

man test 
Problemi correlati