Ich habe ein Verzeichnis mit dem Namen "$pattern" erstellt und jetzt, wann immer ich versuche, es zu entfernen, heißt es
Muster: Undefinierte Variable.
Ich habe versucht:
$ rm -r $pattern
$ rm -rf $pattern
$ rm "$ option[value='2016']"
Antwort1
$
, Leerzeichen '
und [
sind in den meisten Shells Sonderzeichen. Um ihre Sonderbedeutung zu entfernen, müssen Sie die Anführungszeichenmechanismen der Shell verwenden.
DerDie Anführungszeichen-Syntax variiert sehr stark je nach Shell.
In allen mir bekannten Shells können Sie einfache Anführungszeichen verwenden, um alle Zeichen außer einfachen Anführungszeichen, Backslashs und Newline-Zeichen in Anführungszeichen zu setzen (in Bourne-ähnlichen Shells werden auch die letzten beiden in Anführungszeichen gesetzt, \
in manchen Fällen jedoch mit Ausnahme von Backticks).
rm -r '$pattern'
Sollte in den meisten gängigen Shells funktionieren.
rm -r \$pattern
Würde (außer innerhalb von Backticks für Bourne-ähnliche) in allen Shells außer denen der rc
Familie funktionieren.
Gleiches gilt für:
rm "\$option[value='2016']"
In rc
-ähnlichen Shells würden Sie Folgendes verwenden:
rm '$option[value=''2016'']'
Antwort2
Wenn das Verzeichnis leer ist:
rmdir \$pattern
Ansonsten:
rm -r \$pattern
(Es löscht rekursiv alle Dateien, die der Ordner enthält)
Antwort3
Wenn Sie eine Datei bearbeiten müssen, die Sonderzeichen enthält, können Sie die Autovervollständigungsfunktion von Bash verwenden: Geben Sie Ihren Befehl ein (in diesem Fall rmdir
) und drücken Sie dann Tabmehrmals . Dadurch werden alle Dateien/Verzeichnisse im aktuellen Verzeichnis durchsucht, wobei alle Sonderzeichen automatisch maskiert werden.
Dies funktioniert auch gut, wenn Sie mit sehr langen Dateinamen arbeiten.
Antwort4
Sie maskieren das Zeichen einfach mit einem „\“. Dies ist auch eine gängige Vorgehensweise beim Schreiben von SQL-Abfragen in Webanwendungen, um die Ausführung anderer als der beabsichtigten Datenbankbefehle zu verhindern.