2009-05-25 23 views
22

Z jakiegoś powodu potrzebuję mojego skryptu, aby móc akceptować argumenty ze znakami spacji. Jeśli na przykład mam skrypt tak,przekazanie argumentu zawierającego spację w skrypcie powłoki

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

gdybym przekazywać argumenty do skryptu (zakładając, że jest nazywany foo.sh)

sh foo.sh "Hello world" 

Oczekuję skrypt do drukowania Witam świat i zmień katalog na "Hello world". Ale pojawia się ten komunikat o błędzie, zamiast tego, jak dokładnie przekazuję argument z parametrem spacji do polecenia w skrypcie powłoki ?!

Odpowiedz

40

należy owinąć [email protected] w cudzysłów, zbyt: "[email protected]"

Mówi skorupę ignorować spacje w argumenty; nie przekształca wszystkich argumentów w bardzo długi ciąg znaków.

+0

XD dzięki za odpowiedź, miałem ochotę odpowiedzieć na to pytanie, dodatkowe wyjaśnienia http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

Ale jeśli $ @ jest listą umieszczoną " dookoła niego zasadniczo połączy się go w jeden długi ciąg.Nie byłoby iterować nad nim w prawo? I w tym przypadku nie ma rzeczywistego zastosowania w pętli for, normalne 'echo" $ @ "; cd" $ @ "" zrobiłoby to. " Czy istnieje rozwiązanie, w którym mogę mieć' for i in '-constructs delimit on line break, ale nie w przestrzeni? –

+4

@AndreasWederbrand: Nie." $ @ "to specjalny token oznaczający" zawiń każdy " Argument w cudzysłowie ". Tak więc" a "bc" 'staje się (lub raczej pozostaje)' "a" "bc" 'zamiast' "abc" 'lub' "a" "b" "c" '. –

Powiązane problemy