Estoy usando script.sh en un terminal de OS X Mavericks que contiene solo lo siguiente:
echo ${1}
ls ${1}
Ahora, cuando invoco a ./script.sh "/Users/me/some\ directoy\ with\ whitespace/"
, el comando echo imprime /Users/me/some\ directoy\ with\ whitespace/
, pero ls
todavía insiste en dividir todo, por lo que los resultados 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
Observe el \
al final de las primeras tres líneas de error. ¿Cómo hago esto correctamente?
(Soy consciente de que usar tanto "" como \ en el argumento de entrada deja la \ en mi variable, pero supongo que los necesitaría).
También intenté usar ./script.sh /Users/me/some\ directoy\ with\ whitespace/
sin las comillas, luego hice el script
echo ${1}
ls "${1}"
pero eso hizo que la salida echo
no contenga \
ahora, y la salida ls
se ve así:
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
Observe que todo lo que hizo fue agregar las citas sin que parezca que las entienden como sintaxis.
Se relaciona de alguna manera con el IFS (separador de campo 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. Aunque no estoy seguro de por qué.