Was passiert ist, dass Sie cutTester.txt
mit der >
Umleitungsnotation " " abschneiden . Sie bearbeiten dann Ihre tr
Befehle für die umgeleitete Ausgabe einer leeren Eingabedatei.
Beachten Sie, dass Folgendes auch die Datei abschneidet:
$ cat cutTester.txt > cutTester.txt
Insbesondere wenn Sie ein Entwickler sind, sind Sie möglicherweise daran gewöhnt, Aussagen wie zu schreiben x=`eval $x + 1`
, in denen der eval
Ausdruck vor der Zuweisung ausgewertet wird. Das Verhalten von Umleitungsoperatoren ist jedoch nicht analog. Bedenken Sie, dass die Implementierung der Rückgabe einer Datei an sich selbst höchstwahrscheinlich erfordert, dass die Shell im Hintergrund temporäre Dateien erstellt, und dass die Operation nicht so einfach oder effizient ist wie das einfache Zuweisen einer Variablen (die nur im Speicher vorhanden ist).
Glücklicherweise ist es einfach genug, eine temporäre Datei explizit selbst zu erstellen:
#!/bin/bash # reads contents of file| turns lowercase to uppercase | changes $ to # | # then attempts to override original file with new version cat cutTester.txt | tr '[a-z]' '[A-Z]' | tr '$' '#' > cutTester.tmp; mv cutTester.tmp cutTester.txt