2016-06-29 11 views
1

Was geben die BASH-Dateitestoperatoren zurück, wenn das Pfadargument eine leere Zeichenfolge ist? Zum Beispiel:BASH-Dateitestoperatoren mit leeren Strings

directory="" 
# Something may or may not set "directory" 
if [ -d "$directory" ]; then 
    # Do something... 
fi 

Antwort

4

Sie müssen $directory zitieren:

if [ -d "$directory" ]; then 

Ansonsten nach der Expansion Sie links mit dem Äquivalent von

if [ -d ]; then 

, die if [ -n "-d" ]; then äquivalent ist, und so ist immer wahr. (-d ist eine nicht leere Zeichenfolge.)

0

In Ihrem Beispiel die Anweisung den folgenden Test ergeben:

if [ -d ]; then 
    ... 
fi 

Welche testen nicht das, was Sie wollen.

Was ist die akzeptierte Praxis, solche Fehler zu verhindern, ist die Variable in doppelten Anführungszeichen wie folgt zu umhüllen:

if [ -d "$directory" ]; then 
    ... 
fi 
+0

'[[-d]]' ist ein Fehler; '[-d]' ist immer erfolgreich. – chepner

Verwandte Themen