2009-05-25 10 views
22

Per qualche motivo ho bisogno che il mio script sia in grado di accettare argomenti con caratteri di spazio. Se per esempio ho uno script come segue,argomento di passaggio che contiene spazio nello script di shell

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

se passare argomenti allo script (ammesso che si chiama foo.sh)

sh foo.sh "Hello world" 

mi aspetto lo script per stampare Ciao mondo e cambia la directory in "Hello world". Ma ottengo questo messaggio di errore invece

hello 
cd: 5: can't cd to hello 
world 
cd: 5: can't cd to world 

così come esattamente faccio passo argomento con lo spazio char a un comando in uno script di shell ?!

risposta

40

È necessario avvolgere il [email protected] tra virgolette, anche: "[email protected]"

Questo dice la shell di ignorare gli spazi negli argomenti; non trasforma tutti gli argomenti in una stringa molto lunga.

+0

XD grazie per la risposta, ero come andare a rispondere a me stesso, qualche ulteriore spiegazione http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

Ma se $ @ è una lista che mette " intorno a esso sarebbe fondamentalmente unire in una stringa lunga.Non sarebbe iterare su di esso giusto? E in tal caso non vi è alcun reale uso di avere un ciclo for, un normale 'echo" $ @ "; cd" $ @ C'è una soluzione in cui posso avere 'for i in' -constructs delimitare su interruzione di riga ma non spazio? –

+4

@AndreasWederbrand: No. "$ @" è un token speciale che significa "avvolgere ogni individuo argomento tra virgolette ". Quindi" a "bc" 'diventa (o meglio rimane)' "a" "bc" 'invece di' "abc" 'o' "a" "b" "c" '. –

Problemi correlati