So erstellen Sie eine Datei mit einem Namen, der mit dem Symbol „-“ beginnt

So erstellen Sie eine Datei mit einem Namen, der mit dem Symbol „-“ beginnt

Ich möchte den Befehl im Linux-Terminal verwenden touch, um eine Datei mit einem Namen zu erstellen, der -beispielsweise mit dem Symbol beginnt -attempt.

Wie kann ich die Tatsache umgehen, dass es -sich um ein Sonderzeichen handelt?

Wenn ich beispielsweise eine Datei mit dem Namen erstellen möchte #attempt, kann ich nicht einfach schreibentouch #attempt

Stattdessen müsste ich schreiben touch \#attempt, aber in diesem -Fall \funktioniert es trotzdem nicht richtig, auch wenn ich es verwende).

Antwort1

Zwei Wege:

Bewegen Sie das -vom ersten Zeichen weg

touch ./-foo

Oder verwenden Sie den --End-of-Switches-Marker

touch -- -foo

Antwort2

touch \#attemptfunktioniert, weil das Rautezeichen speziell für die Shell ist. Ebenso benötigen Sie etwas wie touch \(foo\)oder touch 'this & that'für Dateinamen mit Klammern oder Et-Zeichen usw.

Aber das Verlassen des Bindestrichs hilft nicht, da es nichts Besonderes istzur Schale, sondern an das von der Shell gestartete Dienstprogramm. Das Ausführen der Shell-Befehlszeile touch \-fooist dasselbe wie das Ausführen von touch -foo, toucherhält -fooaber trotzdem das einzelne Argument.

Anstatt zu fliehen, ist also etwas anderes erforderlich.

Die Standardmethode, um einem Programm mitzuteilen, dass es Befehlsargumente nicht mehr als (mögliche) Optionen interpretieren soll, besteht darin, das Argument --nach den Optionen einzufügen. Dies würde beispielsweise rmmit der Option -fauf einer Datei namens ausgeführt -r:

rm -f -- -r

(und rm -- --würde eine Datei namens entfernen --.)

Alternativ können Sie das Problem umgehen, indem Sie sicherstellen, dass der Bindestrich nicht das erste Zeichen des Dateinamens ist. Dies geschieht normalerweise, indem Sie ein voranstellen ./. Auch hier würde also eine Datei mit dem Namen entfernt -rf:

rm ./-rf

verwandte Informationen