2016-09-15 3 views
0

Ich benutze Terminal (Bash) in OSX und versuchen, ein ausführbares Skript erstellen, die ein Verzeichnis von Eingabe erstellen, aber ich habe Probleme bei der Eingabe einer Zeichenfolge mit Leerzeichen (und ich brauche Leerzeichen).Terminal (Bash) - mkdir von lesen Eingabezeichenfolge

Zum Beispiel, wenn Sie "neuen Ordner" in den folgenden Code eingeben, wird es zwei Ordner namens "neu" und "Ordner" natürlich erstellen.

read dName; mkdir $dName 

Aber mit dem Code unten, aus irgendeinem Grunde, den ich einen Ordner dies namens bin immer: „% 80% 9D

read dName; mkdir "$dName" 

Wenn ich den zweiten Code in der Klemme stecken, ohne ein ausführbares Skript, Es funktioniert. Ich bin mir nicht sicher, warum die Verwendung eines ausführbaren Skripts, um es auszuführen, mir "% 80% 9D" anstelle des Ordnernamens gibt. Bitte helfen Sie wenn möglich.

+0

Sind Sie sicher, dass Sie in Ihrem Code normale ASCII-Anführungszeichen verwenden oder geschweifte Anführungszeichen verwenden? Ein rechtes lockiges Zitat '' 'hat' E2 80 9D' als UTF-8-Kodierung. – chepner

Antwort

1

Sie verwenden im Skript kuriose Anführungszeichen, keine regulären ASCII-Anführungszeichen. Das Skript ist UTF-8 kodiert, was bedeutet, das Argument zu mkdir als folgendem Byte-Stream gespeichert:

  • e2 80 9c - links geschweifte Zitat
  • 24 64 4e 61 6d 65-$dbash
  • e2 80 9d - geschweifte Zitat

Wenn jedoch das Skript ausgeführt wird, scheinen diese Bytes mit ISO-Latin-1 interpretiert zu werden. Da e2 ein gültiges Byte für einen Bezeichnernamen ist und die geschweiften Anführungszeichen nichts entziehen, sieht bash$dBash%E2 als die Erweiterung einer einzelnen undefinierten Variablen, die auf die leere Zeichenfolge erweitert wird. So erhält mkdir%e2%80%9c%90%9d als Argument. Der angeforderte Dateiname wird erstellt. Beim Auflisten des Verzeichnisses werden die ersten drei Bytes wiederum als UTF-8 interpretiert, um ein linkes geschweiftes Anführungszeichen anzuzeigen, aber die restlichen zwei haben keine Interpretation und werden so angezeigt, wie sie ist.

+0

Take-Home-Nachricht: Code mit einem * Text * -Editor bearbeiten, kein Textverarbeitungsprogramm. –

Verwandte Themen