2009-05-25 4 views
22

Aus irgendeinem Grund muss mein Skript Argumente mit Leerzeichen akzeptieren. Wenn ich zum Beispiel ein Skript, wie folgt,Übergabe von Argument mit Leerzeichen im Shell-Skript

for SOME_VAR in [email protected] 
do 
    echo "$SOME_VAR" 
    cd "$SOME_VAR" 
done; 

wenn ich Argumente an das Skript übergeben (vorausgesetzt, es wird foo.sh genannt)

sh foo.sh "Hello world" 

ich das Drehbuch erwarte drucken Hallo Welt und ändern Sie das Verzeichnis in "Hallo Welt". Aber ich bekomme diese Fehlermeldung statt

also wie genau übergebe ich Argument mit Leerzeichen Char an einen Befehl in einem Shell-Skript ?!

Antwort

40

Sie müssen die [email protected] in Anführungszeichen wickeln auch: "[email protected]"

Dies teilt der Shell Räume in den Argumenten zu ignorieren; Es wandelt nicht alle Argumente in eine sehr lange Zeichenfolge um.

+0

XD danke für die Antwort, ich würde gerne selbst antworten, einige weitere Erklärung http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

Aber wenn $ @ ist eine Liste setzen " Um es herum würde es im Wesentlichen in eine lange Zeichenfolge zusammenführen.Es würde nicht iterieren darüber richtig? Und in diesem Fall gibt es keine echte Verwendung in eine for-Schleife, eine normale 'echo" $ @ "; cd" $ @ "' würde tun. Gibt es eine Lösung, wo ich 'für i in' -Konstruktionen Abgrenzung auf Zeilenumbruch haben kann, aber nicht Leerzeichen? –

+4

@AndreasWederbrand: Nein. "$ @" ist ein besonderes Token, das bedeutet "wickeln jede einzelne Argument in Anführungszeichen ". So wird" a "bc" "(oder besser bleibt)" a "" bc "' anstelle von "" abc "" oder "a" "b" "c" '. –

Verwandte Themen