Befehl nicht gefunden " - Fehler in der Bash-variable Zuordnung
Habe ich dieses Skript aufgerufen test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
wenn ich sh test.sh
ich dieses:
test.sh: line 2: STR: command not found
Was mache ich falsch? Ich schaue extrem basic/Anfänger-bash-scripting-tutorials online und dies ist, wie Sie sagen, um Variablen zu deklarieren... Also ich bin mir nicht sicher, was ich falsch mache.
Bin ich auf Ubuntu-Server 9.10. Und ja, die bash befindet sich in /bin/bash
.
Ich bin froh, dass Sie nicht die Frage stellen, bist du nicht der einzige bash noob!
Danke für das Fragen, die Frage. Dies ist keine Frage zu schämen. Ich arbeite spät in die Nacht im Büro & es ist kein Bash-Experte, um mir diese zu beantworten.
In diesen Tagen (fast sieben Jahre später!) es ist ein FOSS-linter/analyzer genannt shellcheck, dass wird automatisch erkennen, diese und andere gemeinsame syntax. Es kann verwendet werden, online oder offline installiert und integriert sich in den editor.
Siehe auch stackoverflow.com/questions/26971987/...
Ich würde empfehlen, Sie zu nutzen:
Danke für das Fragen, die Frage. Dies ist keine Frage zu schämen. Ich arbeite spät in die Nacht im Büro & es ist kein Bash-Experte, um mir diese zu beantworten.
In diesen Tagen (fast sieben Jahre später!) es ist ein FOSS-linter/analyzer genannt shellcheck, dass wird automatisch erkennen, diese und andere gemeinsame syntax. Es kann verwendet werden, online oder offline installiert und integriert sich in den editor.
Siehe auch stackoverflow.com/questions/26971987/...
Ich würde empfehlen, Sie zu nutzen:
#!/usr/bin/env bash
anstatt direkt #!/bin/bash
es sei denn, Sie sind sich absolut sicher, dass Ihr bash
ist in /bin
weil diese Antwort: stackoverflow.com/a/21613044/3589567InformationsquelleAutor Jake Wilson | 2010-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Leerzeichen um Ihr das Zeichen'='.
Wenn Sie schreiben:
bash versucht, einen Befehl auszuführen namens STR, mit 2 Argumenten (die Zeichen '=' und 'foo')
Wenn Sie schreiben:
bash versucht, einen Befehl auszuführen namens STR, mit 1 argument (der string '=foo')
Wenn Sie schreiben:
bash versucht, den Befehl foo mit STR auf die leere Zeichenfolge gesetzt, die in seiner Umwelt.
Ich bin mir nicht sicher, ob dies hilft zu klären, oder ob es bloße Verschleierung, aber beachten Sie, dass:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.Entsprechenden Abschnitt des sh language-Spezifikation, Abschnitt 2.9.1 Staaten:
In diesem Zusammenhang eine
word
ist der Befehl, der bash ausgeführt wird. Jeder string mit=
(in einer anderen position als zu Beginn der Zeichenfolge), die nicht eine Umleitung ist eine Variablen-Zuweisung, während jede Zeichenfolge, die nicht auf eine Umleitung und nicht enthalten=
ist ein Befehl. InSTR = "foo"
,STR
ist nicht eine variable Zuordnung.chomp@ In der Regel 7b der Abschnitt 2.10.10 von pubs.opengroup.org/onlinepubs/9699919799 ", Wenn alle Zeichen vor dem ' = ' - Formular, einen gültigen Namen ein (siehe XBD Name), token ASSIGNMENT_WORD, zurückgegeben werden." Der link zu Abschnitt 3.231 von pubs.opengroup.org/onlinepubs/9699919799, finden wir "In die" shell command language", ein Wort, das ausschließlich aus Unterstriche, Ziffern und Buchstaben aus dem portable character set. Das erste Zeichen eines namens keine Zahl.". So ist das Wort
FOO-BAR=qux
ist keine Variablendefinition, daFOO-BAR
ist kein Gültiger name.Ich biete eine Prämie zu honorieren diese klare Erklärung zu einer gemeinsamen Ausgabe für Anfänger (naja, und auch in der Lage sein zu finden, es schneller, wenn ich will, zu verlinken :D). Danke dafür, dass die Dinge so einfach!
Danke! Ich bin nicht ganz davon überzeugt, dass dies ist eine klare Erklärung, und ich Frage mich oft, ob es sein könnte, einfacher gemacht.
InformationsquelleAutor William Pursell
Drop die Räume rund um die
=
Zeichen:set foo = bar
ist ein verbreiteter Fehler in der Windows-batch-Dateien als gut—und dort die batch-Sprache ist lächerlich für ihn 😉Danke @joey. Ich steckte das schreiben ein shell-Skript, wo ich war initialisieren von Variablen mit Leerzeichen nach dem "=". Sie meinen Tag gerettet
Warum bash nicht akzeptieren Nummern im linken Feld? wie 3="Hallo Welt", beschwert es sich darüber, dass der Befehl nicht gefunden
InformationsquelleAutor Joey
In den interaktiven Modus sieht alles gut
Offensichtlich ! als Johannes sagte, keine Leerzeichen um das '='. In Fall gibt es keine Leerzeichen um das '=' dann in den interaktiven Modus, es gibt Fehlermeldungen wie `
STR = "Hello World"
, also diese Antwort gilt hier nicht.was ist die Bedeutung des interaktiven Modus ist, es hat etwas zu tun mit der
$
markvon "interaktiven Modus", er bedeutet, dass die Eingabe dieser Kommandos in das eigentliche terminal, nicht in ein Skript.
InformationsquelleAutor Arkapravo
Wenn Sie definieren eine variable, dann müssen Sie nicht haben, um in alle zusätzlichen Leerzeichen.
E. g.
Also Leerzeichen entfernen:
und es funktioniert gut.
InformationsquelleAutor Ravi Solanki
Ich weiß, dies wurde beantwortet mit einem sehr hochwertigen Antworten. Aber, kurz gesagt, Sie nicht über Räume.
Funktionierte nicht, weil die Leerzeichen um das Gleichheitszeichen. Wenn Sie zu laufen waren...
Es funktionieren würde
InformationsquelleAutor Derek Haber
Ich habe genau das gleiche problem, aber es scheint nicht zu einem syntax-Fehler. Hier ist ein einfaches Skript:
diese Ausgänge folgenden Fehler, wo ich glaube, die ersten beiden sind verhandelbar:
InformationsquelleAutor mokorana