Aus irgendeinem seltsamen Grund habe ich "'" als Worttrennzeichen in Bezeichnern versucht, wie in:
$ export foo'bar=1
>
> ^C
$
Das Ergebnis ist , wie oben gezeigt, id est die Eingabeaufforderung ändert sich zu „>“ und das System wartet offensichtlich für weitere Informationen auf meiner Seite. Wie Sie sehen, musste ich Strg-C drücken, um zu entkommen. Das gleiche passiert mit anderen Befehlen wie
$ ls foo'bar
$ mkdir foo'bar
Ich bin neugierig auf den Sinn all dessen, das ist die besondere Bedeutung von "'" in Terminalbefehlen (so besonders, dass es sogar innerhalb von IDs auseinander genommen wird).
Extra: Nebenbei möchte ich auch die Menge der speziellen oder anderweitig ungültigen Zeichen in Datei- und Ordnernamen kennen, sowohl unter Unix-ähnlichen als auch unter Windows-Systemen (um die gemeinsame Teilmenge der sicheren zu erhalten) (insbesondere, was ist mit allem Nicht-ASCII?).
Danke, Denis
quelle
Antworten:
Das Zeichen 'ist ein sehr mächtiges Zeichen, wenn es in einem Shell-Befehl verwendet wird. Grundsätzlich deaktiviert das '(Apostroph) alle Arten von Transformationen oder Modifikationen. Es würde alles, was mit den Markierungen eingeschlossen ist, als eine einzelne Entität betrachten, dh als einen einzelnen Parameter. Es würde absolut keine Substitution oder Erweiterung stattfinden.
Beispiel:
würde am Ausgang die Zeichenfolge
$HOME
selbst erzeugen und den Pfad zu Ihrem Home-Verzeichnis nicht drucken. Da die einfachen Anführungszeichen jede Art von Erweiterung verhindern, wird durch Ersetzen und Einfaches alles als einfacher Parameter an sich betrachtet.Wenn Sie den Apostroph so verwenden möchten, wie er ist, müssen Sie ihm entkommen:
Wenn es nicht maskiert wird, wartet es darauf, dass das Paar geschlossen wird, wie es in Ihrem ersten Beispiel geschehen ist.
Korrigiert lautet Ihr Befehl also:
HINWEIS: Wie Milan Todorovic bemerkt hat, ist dies nicht gültig, da Sie in diesem Fall kein Apostroph verwenden können.
quelle
Charakter
'
ist ein Sonderzeichen. Sie markieren damit einen Teil des Befehlszeileneintrags, der nicht geändert wird (z. B. kein Ersatz für Platzhalter). Beispielsweise:Dies bedeutet, dass das Argument für was
ls
warbla*
und nicht alles, was damit beginntbla
.Der Grund, warum Sie
>
Charakter erhalten, ist, dass Sie einen'
zum Öffnen und einen'
zum Schließen eines Teils verwenden müssen, der nicht geändert wird.Wenn Sie
'
in Ordnernamen verwenden möchten, müssen Sie diese wie folgt maskieren :\'
. Wenn Sie also einen Ordner mit dem Namenfoo'bar
auflisten möchten, sollten Sie Folgendes eingebenls foo\'bar
.Oh, und ich bin mir nicht sicher, ob es möglich ist,
'
Umgebungsvariablennamen zu verwenden. Ich denke, dass Sie nicht verwenden könnenexport foo\'bar=1
,Hoffe das hilft.
quelle