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 ?!
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
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? –
@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" '. –