"STR: Befehl nicht gefunden" beim Zuweisen eines Werts zu einer Variablen

9

Ich habe die folgenden Zeilen in ein Shell-Skript namens "test.sh" eingegeben:

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

Nachdem chmod zur ausführbaren Datei ausgeführt wurde, habe ich das Skript mit ausgeführt ./test.sh. Ich bekomme jedoch die Nachricht

./test.sh: line 3  STR: Command not found

Was mache ich falsch?

Jay Silver
quelle
1
Hat Terdons Antwort Ihre Frage gelöst? Wenn nicht, kann es sein, dass Sie versehentlich Leerzeichen um Ihre Variablenzuweisung haben.
Arronical
@Voker nur ein stilistischer Kommentar basierend auf meinem Vorschlag : Ich denke, es ist am besten, Blockquote für Fehlermeldungen anstelle von Codeblock zu verwenden; Am Ende ist dies kein Code, sondern ein Text, den der Bash-Interpreter zurückgibt.
Fedorqui
@ Fedorqui warum? Zitat Blöcke erhalten nicht die Formatierung, interpretieren sie Sonderzeichen (zB *, _, #) als Abschlag und sind unterschiedlich von Screenreader - Software gemacht. Ich denke, dass alles, was von einem Computer gegeben oder empfangen wird, in Codeblöcken sein sollte. Sie wissen nie, wann das genaue Format relevant sein kann. Besonders wenn es um solche Dinge geht, bei denen Unicode ins Spiel kommt.
Terdon
@terdon es hängt wirklich von Fällen ab und es gibt sogar eine Anforderung, das Format für Protokolle / Warnungen / Fehlermeldungen hinzuzufügen, was das Umbrechen von Wörtern ermöglicht und Zeilenumbrüche beibehält . Wenn es sich nur um eine Zeile wie diese handelt, bevorzuge ich Anführungszeichenblöcke, da dies das Verständnis von Code und Fehlern erleichtert.
Fedorqui
@fedorqui Ich denke, wir sollten es zu Meta bringen, aber ich bevorzuge immer Schriftarten mit fester Breite und exakter Formatwiedergabe, wenn ich eine Nachricht poste, die entweder gelesen oder von einem Computer produziert wird.
Terdon

Antworten:

20

Womit erstellen Sie dieses Skript? Die Anführungszeichen, die Sie in Ihrer Frage haben, sind falsch. Sie sind aber keine regulären doppelten Anführungszeichen ( ") . Die regulären Anführungszeichen sind:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Während deine sind:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Verwenden Sie einfach reguläre Anführungszeichen und es wird Ihnen gut gehen:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
Terdon
quelle
Danke für die Antwort Terdon. Die doppelten Anführungszeichen in der Datei sind korrekt. Der Beitrag stammt aus einer E-Mail.
Jay Silver
1
unipropssieht gut aus. Ich habe die Seite gefunden (ist das unser eigener Tchrist?). Muss ich es von der Quelle herunterladen oder ist es irgendwo in einem Paketmanager verfügbar? E: Unable to locate package uniprops
TRiG
1
Ich benutze Perl nicht viel (kaum). Ich möchte nur mehr als das Minimum über Unicode wissen .
TRiG
1
@TRiG Nun, in Ubuntu ist es so einfach wie sudo apt-get install cpanminus; sudo cpanm Unicode::Tussleund dann haben Sie den unipropsBefehl. Natürlich hat Tchrist das verdammte Ding geschrieben, also kannst du ihn auch im Chat fragen :)
Terdon
1
Ich bin leider die ganze Zeit auf diese Art von Unsinn gestoßen. Ein bestimmtes Wiki-System bei meinem Arbeitgeber scheint die unangenehme Angewohnheit zu haben, Bindestrich-minus -U + 002D in Bindestrich U + 2010 ( oder ähnliches ) zu übersetzen. Dann hören Dinge wie uname ‐aaufhören zu arbeiten: - /. E-Mail-Clients haben oft ähnliche schändliche Gewohnheiten - insbesondere bei der Verwendung der HTML-Formatierung - ein weiterer guter Grund, Klartext-E-Mails zu bevorzugen.
Digitales Trauma