2009-05-25 4 views
22

Por algún motivo, necesito que mi script pueda aceptar argumentos con caracteres de espacio. Si, por ejemplo, tengo un script de la siguiente manera,argumento de paso que contiene espacio en el script de shell

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

si pasar argumentos al script (suponiendo que se llama foo.sh)

sh foo.sh "Hello world" 

Estoy contando con la secuencia de comandos para imprimir Hola mundo y cambie el directorio a "Hola mundo". Pero me sale este mensaje de error en lugar

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

así que ¿cómo es exactamente lo que me pase discusión con carbón espacio para un comando en un script de shell ?!

Respuesta

40

Usted debe envolver el [email protected] entre comillas, también: "[email protected]"

Esto le dice al shell para ignorar espacios en los argumentos; no convierte todos los argumentos en una cadena muy larga.

+0

XD gracias por la respuesta, iba a responder yo mismo, alguna explicación más detallada http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

Pero si $ @ es una lista para poner " alrededor de eso, básicamente, se fusionaría en una cadena larga. No se iteraría sobre ella ¿no? Y en ese caso no hay un uso real para tener un bucle for, un 'echo" normal $ @ "; cd" $ @ "' haría. ¿Hay una solución donde puedo tener 'for i in' -construye delimit en línea pero no espacio? –

+4

@AndreasWederbrand: No. "$ @" es un token especial que significa "envolver cada individuo argumento entre comillas ". Entonces' a "bc" 'se convierte (o más bien se mantiene)' "a" "bc" 'en lugar de' "abc" 'o' "a" "b" "c" '. –

Cuestiones relacionadas