2012-06-14 21 views
18

Ich schreibe dieses einfache Bash-Skript wie folgt.Bash-Array: Unerwarteter Syntaxfehler

#!/bin/bash 

array=(/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf) 
echo ${array[@]} 

Ich erwartete, dass es alle Namen der Dateien im Array drucken. Aber ich habe diesen Fehler statt:

test.sh: 3: Syntax error: "(" unexpected 

Wenn ich die Erklärung des Arrays ändern

array = {/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf} 

dieser Fehler geht weg, aber ich habe immer noch neue Fehler

test.sh: 3: array: not found 
test.sh: 4: Bad substitution 

Wie kann ich lösen dieses Problem? Dies ist mein erstes Mal in der Shell-Programmierung, so dass ich die Probleme nicht selbst beheben kann.

BESCHLOSSEN:

Ich war es, als sh test.sh Ausführung aber ich vergaß ich es als bash test.sh

+1

Das ist kein assoziatives Array. Es ist ein normales, numerisch indexiertes Array. –

+0

@DennisWilliamson Oh Ok. Ich werde es bearbeiten – user1357576

+2

@ user1357576: Post die Lösung als Antwort und markieren Sie es akzeptiert, bearbeiten Sie es nicht in der Frage. Bearbeiten Sie den Titel auch nicht, um ihn zu lösen. Die Website markiert die Frage als gelöst, wenn Sie eine Antwort akzeptieren. – Daenyth

Antwort

1

Variablenzuweisungen haben keinen Platz um das = Zeichen auszuführen hatte :

array=(/a/b/ /c/d) 
    ^--no spaces 

sind Sie sicher?

[email protected]:~$ array =(a b)  
bash: syntax error near unexpected token `(' 
[email protected]:~$ array= (a b) 
bash: syntax error near unexpected token `(' 
[email protected]:~$ array = (a b) 
bash: syntax error near unexpected token `(' 
[email protected]:~$ array=(a b) 
[email protected]:~$ echo ${array[1]} 
b 
+0

Kein Glück. Ich habe den Platz immer noch entfernt bekomme mir den Syntaxfehler – user1357576

+0

interessanterweise wenn ich ihn direkt am Terminal ausführe, funktioniert es.Aber wenn ich dasselbe in einer Datei verwende, tut es das nicht! – user1357576

+0

@ user1357576: funktioniert hier gut, wenn ich das obige in eine Datei lege. Natürlich werden die Syntaxfehlerzeilen das Skript beenden, aber wenn es nur die letzte raumlose Zuweisung ist, funktioniert es gut. –

0

Zeiger: Leerzeichen sind bei der Variablenzuweisung in BASH wichtig. Verwenden Sie sie nicht vor oder nach das Gleichheitszeichen.

+0

Ich verstehe, dass ich die gleichen Befehle direkt am Terminal ausgeführt habe und es funktioniert. ABER die gleichen Befehle, die ich in test.sh eingegeben und ausgeführt habe, werfen sie den Fehler ... Würdest du wissen warum? – user1357576

+0

@ user1357576 Aus Ihrem obigen Kommentar scheint es, dass Sie den Unterschied zwischen 'sh' und' bash' gelernt haben. 'sh' ist in einigen Umgebungen nicht garantiert' bash'. Tatsächlich wird "sh" oft mit reinen POSIX-Shells wie "Strich" verknüpft. –

0

Verwenden Sie einen DOS-Editor, um Ihr Skript zu erstellen?

Bash etc Schalen, nicht wie CRLF Paare, nur LF (oder \r\n Zeichen VS einfach nur \n char).

Setzen Sie Ihr Skript durch diesen Test

cat -vet myScript.sh 

Haben Sie '^ M' Zeichen am Ende der Linien sehen? Wenn das so ist, ist das eine DOS-Datei.

Prüfen Sie, ob Ihr System hat dos2unix dann wie

verwenden
dos2unix myScript.sh 

Auch, wie mehrere Personen auf sie kommentiert haben, geben Sie bitte Ihre ursprüngliche Frage bearbeiten, um die Räume um Ihre = Zeichen in den Zuweisungen array zu beseitigen.

Ich hoffe, das hilft.