Die Prüfung, ob eine Datei lesbar und vorhanden in einer if-Bedingung: if [[ -r -f “/Datei.png" ]]
Ich Schreibe eine if-Anweisung, die überprüft, ob eine Datei lesbar ist und existiert, indem Sie Folgendes tun:
if [[ -r "$upFN" && -f "$upFN" ]]; then
....
fi
Dann dachte ich, vielleicht können Sie diese kleineren, etwas, das vielleicht so:
if [[ -r -f "$upFN" ]]; then
....
fi
Aber das funktioniert nicht, es gibt Fehler zurück:
./ftp.sh: line 72: syntax error in conditional expression
./ftp.sh: line 72: syntax error near `"$upFN"'
./ftp.sh: line 72: `if [[ -r -f "$upFN" ]]; then'
-f
ist für Dateien, die -d
ist für Verzeichnisse.Hoppla, wollte nicht zu haben /Ordner/ Titel 😛
InformationsquelleAutor Mint | 2011-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAICT, es gibt keine Möglichkeit, Sie zu kombinieren weiter. Als Portabilität beachten Sie,
[[ expr ]]
weniger tragbar als[ expr ]
odertest expr
. Die C-Stil&&
und||
sind nur in der bash, so möchten Sie vielleicht zu prüfen, mit der POSIX-syntax-a
für und und-o
für oder. Ich persönlich bevorzuge mittest expr
da ist es sehr eindeutig. Viele shells (bash im Lieferumfang enthalten) enthalten eine vordefinierte für Sie, so dass Sie nicht haben, um sorgen über die Prozess-Erstellung von overhead.In jedem Fall würde ich umschreiben, dass Ihr test als:
Dass die syntax der klassischen Bourne-shell, Korn-shell und Bash. Sie können die
[
syntax portabel genauso gut.Also Wann sollte Bash-spezifische Funktionen verwendet werden?
InformationsquelleAutor D.Shawley
Ist es jemals einen Fall, wo eine Datei wäre lesbar, aber es nicht vorhanden??? Nicht die Mühe der überprüfung für die Existenz, wenn Lesbarkeit wird Ihnen sagen, alles, was Sie brauchen.
-r
Prüfungen für die Lesbarkeit und die-f
prüft, ob ein Datei existiert. Die-r
Teil, konnte es gelingen, für ein Verzeichnis und die-f
fehl. Die post habe nicht erwähnt, dass-f
benötigt das Element eine Datei ist.-e
Prüfungen für die Existenz.Ich dachte, dass-f und -r wird nie erfolgreich, wenn die Datei nicht existiert, noch nie gehört die -e, wird zu prüfen haben der Mann.
Werfen Sie einen Blick auf pubs.opengroup.org/onlinepubs/007908799/xcu/test.html
Ich habe gerade festgestellt, dass es ist ein Fall, wo
-r <file>
wahr ist und-f <file> && -r <file>
ist nicht: für ein lesbares Verzeichnis.Ja, @Oliv. Das ist, was D. Shawley darauf hingewiesen — die Unterscheidung zwischen
-f
und-e
. Ich glaube nicht, dass es eine wichtige Unterscheidung in diesem Fall, weil ich denke, dass Mint glaubte-f
zu handeln wie-e
alle zusammen. Das ist, denke ich, dass die ursprüngliche Nutzung-f
war ein Fehler.InformationsquelleAutor Rob Kennedy