2016-12-26 1 views
-3

In bash Scripting, können Sie dies erklären, wenn Anweisung if[ -d "/"$file ] so wird es überprüfen, dass es ein Verzeichnis ist? wo $file ist eine Variable, die den ls /Dateien testen in Linux mit If-Bedingung

+0

Ihr Skript zu Ihrer Frage hinzufügen. – Cyrus

+1

Das Leerzeichen zwischen 'if' und' ['ist nicht optional. – choroba

+0

Der beste Weg, solche Dinge zu verstehen, ist das [bash Handbuch] (https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html) zu lesen – kaylum

Antwort

0
if [ -d "/"$file ] 

speichert, ist eine gleiche wie

test -d "/"$file 
if (exit $?) 

oder

if $(test -d "/"$file) 

und -d FILE Mittelwert testen: DATEI existiert und ein Verzeichnis ist (Mann Prüfung).

weil innen test.c Sie haben:

case 'd':     /* File is a directory? */ 
    return (sh_stat (arg, &stat_buf) == 0 && (S_ISDIR (stat_buf.st_mode))); 


sh_stat  to have stat_buf of the FILE, if exist. 
S_ISDIR  mask on stat_buf to know if it is a directory. 

Warum doppelte Anführungszeichen in if-Anweisung:

to concat string "A" and "B" you can write "A""B" 
to concat "/" and $file you can write "/"$file , "/"${file}, "/$file" or "/${file}" 
+0

können Sie erklären, warum doppelte Anführungszeichen in if-Anweisung? – chandu

+0

'test' ist auch ein Bash-Built-in und wird anstelle von'/bin/test' ausgeführt, daher wäre die relevante Quelle in diesem Fall Bash selbst, würde ich sagen. –

+0

wenn [-d $ datei] gleich ist wie wenn [-d "/" $ datei]? – chandu

Verwandte Themen