Ich habe dieses Skript namens test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
Wenn ich renne, sh test.sh
bekomme ich folgendes:
test.sh: line 2: STR: command not found
Was mache ich falsch? Ich schaue mir extrem einfache / Anfänger-Bash-Scripting-Tutorials online an und so sagen sie, dass sie Variablen deklarieren sollen ... Ich bin mir also nicht sicher, was ich falsch mache.
Ich bin auf Ubuntu Server 9.10. Und ja, Bash befindet sich bei /bin/bash
.
#!/usr/bin/env bash
anstatt direkt setzen ,#!/bin/bash
es sei denn , du bist absolut sicher , dass Ihrbash
heißt in/bin
wegen dieser Antwort: stackoverflow.com/a/21613044/3589567Antworten:
Sie dürfen keine Leerzeichen um Ihr '=' - Zeichen haben.
Wenn Sie schreiben:
bash versucht einen Befehl namens STR mit 2 Argumenten auszuführen (die Zeichenfolgen '=' und 'foo')
Wenn Sie schreiben:
bash versucht einen Befehl namens STR mit 1 Argument auszuführen (der String '= foo')
Wenn Sie schreiben:
bash versucht, den Befehl foo auszuführen, wobei STR auf die leere Zeichenfolge in seiner Umgebung gesetzt ist.
Ich bin mir nicht sicher, ob dies zur Klärung beiträgt oder ob es sich lediglich um eine Verschleierung handelt, aber beachten Sie Folgendes:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.Der relevante Abschnitt der sh-Sprachspezifikation, Abschnitt 2.9.1, besagt:
In diesem Zusammenhang ist a
word
der Befehl, den bash ausführen wird. Jede Zeichenfolge, die=
(an einer anderen Position als am Anfang der Zeichenfolge) keine Umleitung enthält, ist eine Variablenzuweisung, während jede Zeichenfolge, die keine Umleitung ist und keine enthält,=
ein Befehl ist. InSTR = "foo"
,STR
ist nicht eine variable Zuordnung.quelle
FOO-BAR=qux
ist also keine Variablenzuweisung, daFOO-BAR
es sich nicht um einen gültigen Namen handelt.Lassen Sie die Leerzeichen um das
=
Schild fallen:quelle
set foo = bar
es auch in Windows-Batchdateien ein häufiger Fehler ist - und dort wird die Batch-Sprache dafür lächerlich gemacht ;-)Im interaktiven Modus sieht alles gut aus:
Offensichtlich (!) Wie Johannes sagte, kein Platz um
=
. Falls=
in der Nähe ein Leerzeichen vorhanden ist, werden im interaktiven Modus Fehler als angezeigtquelle
STR = "Hello World"
, dass diese Antwort hier nicht gilt.$
Marke zu tunIch weiß, dass dies mit einer sehr hochwertigen Antwort beantwortet wurde. Aber kurz gesagt, Sie können keine Leerzeichen haben.
Hat wegen der Leerzeichen um das Gleichheitszeichen nicht funktioniert. Wenn du rennen würdest ...
Es würde funktionieren
quelle
Wenn Sie eine Variable definieren, müssen Sie keine zusätzlichen Leerzeichen einfügen.
Z.B
Entfernen Sie also Leerzeichen:
und es wird gut funktionieren.
quelle