Hab nie verstanden, wie find funktionert: Beispiel: x, y und z sind Datein
find . -name x -and -print
liefert x wie erwartet, während
find . -print -and -name x
x, y und z liefert. Wieso? -and sollte doch kommutativ sein.
Grund: -print liefert zwar immer -true, druckt den aktuellen Filename aus, sobald es ausgewertet wird, nicht erst am Ende der kompletten Auswertung. Im ersten Beispiel wird es bei y ausgewertet, druckt y und liefert true, danach wird -name x ausgewertet, das liefert zwar false, aber der Dateiname wurde bereits gedruckt.
Im zweiten Beispiel wird zuerst -name x ausgewertet und die weitere Auswertung aabgebrochen, weil das Ergebnis false liefert und der ganze Term sowieso false liefern wird.
Zur Veranschaulichung:
find. -print -and -name x -and -print liefert
x,x,y,z
find . -name x -and -print
liefert x wie erwartet, während
find . -print -and -name x
x, y und z liefert. Wieso? -and sollte doch kommutativ sein.
Grund: -print liefert zwar immer -true, druckt den aktuellen Filename aus, sobald es ausgewertet wird, nicht erst am Ende der kompletten Auswertung. Im ersten Beispiel wird es bei y ausgewertet, druckt y und liefert true, danach wird -name x ausgewertet, das liefert zwar false, aber der Dateiname wurde bereits gedruckt.
Im zweiten Beispiel wird zuerst -name x ausgewertet und die weitere Auswertung aabgebrochen, weil das Ergebnis false liefert und der ganze Term sowieso false liefern wird.
Zur Veranschaulichung:
find. -print -and -name x -and -print liefert
x,x,y,z
Kommentare