Estoy usando script.sh en una terminal de OS X Mavericks que sólo contiene lo siguiente:
echo ${1}
ls ${1}
Ahora, cuando llamo a ./script.sh "/Users/me/some\ directoy\ with\ whitespace/"
el comando echo imprime /Users/me/some\ directoy\ with\ whitespace/
pero ls
sigue insistiendo en dividir todo, por lo que los resultados allí son
ls: /Users/me/some\: No such file or directory
ls: directoy\: No such file or directory
ls: with\: No such file or directory
ls: whitespace/: No such file or directory
Fíjese en el \
al final de las tres primeras líneas de error. ¿Cómo puedo hacer esto correctamente?
(Soy consciente de que usar tanto "" como \ en el argumento de entrada deja el \ en mi variable, pero asumo que los necesitaría).
También he probado a utilizar ./script.sh /Users/me/some\ directoy\ with\ whitespace/
sin las comillas, entonces haciendo el script
echo ${1}
ls "${1}"
pero eso hizo que el echo
no contiene ninguna \
ahora, y el ls
la salida tiene este aspecto:
ls: "/Users/me/some\: No such file or directory
ls: directoy\: No such file or directory
ls: with\: No such file or directory
ls: whitespace/": No such file or directory
Fíjate que lo único que ha hecho es añadir las comillas sin que parezca que las entiende como sintaxis.
Está relacionado de alguna manera con el IFS (separador de campos de entrada) ya que si hago el script
IFS=*
ls ${1}
y ejecutarlo como ./script.sh /Users/me/some\ directoy\ with\ whitespace/
me muestra correctamente el contenido del directorio especificado. Sin embargo, no estoy seguro de por qué.