2016-08-08 24 views
-1

folgende Hinweise ich von meiner vorherigen Post bekam, habe ich einen Bash-Skript"Syntax in der Nähe unerwartetes Token` {cd '" definiert Shell-Funktion

#!/bin/bash 

mycd() 
{cd /home/milenko/data;} 

mycd 

./p2 

p2 ist ausführbar

Aber

[email protected]:~$ bash a1.sh 
a1.sh: line 4: syntax error near unexpected token `{cd' 
a1.sh: line 4: `{cd /home/milenko/data;}' 

Warum?

+1

Leerzeichen sind relevant, siehe das Beispiel in Charles 'Kommentar zu Ihrer letzten Frage. –

+1

'{CD/home/Milenko/Daten; } ' – janos

+0

@ BenjaminW. Ok, Leerzeichen sind relevant, aber was für Leerstellen bedeuten? –

Antwort

1

Shell-Syntax (nicht nur bash, sondern in POSIX sh) ist um Einheiten namens "Wörter" aufgebaut. { hat nur dann seine syntaktische Bedeutung, wenn es als eigenes Wort geparst wird - was bedeutet, dass es von Leerzeichen umgeben sein muss (eine Kategorie, die Zeilenumbrüche enthält).

Der herkömmliche Weg, dies würde zu schreiben sein:

mycd() { 
    cd /home/milenko/data 
} 

... oder, wenn Sie minimieren newlines wollen:

mycd() { cd /home/milenko/data; } 

Sie den Raum zwischen den endgültigen ; entfernen konnten und Schließen } (seit ;, wenn außerhalb von Anführungszeichen gefunden und nicht maskiert, endet jedes Wort, das vorher war), aber dies würde als hässlich angesehen werden:

mycd() { cd /home/milenko/data;} # leaving out the last space is legal, but please don't.