Wie entferne ich einen Ordner, der mit „$“ beginnt?

Wie entferne ich einen Ordner, der mit „$“ beginnt?

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 rcFamilie 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.

verwandte Informationen