J'utilise script.sh dans un terminal OS X Mavericks contenant uniquement ce qui suit :
echo ${1}
ls ${1}
Maintenant, quand j'appelle ./script.sh "/Users/me/some\ directoy\ with\ whitespace/"
la commande echo imprime /Users/me/some\ directoy\ with\ whitespace/
mais ls
insiste toujours pour tout diviser, donc les résultats sont les suivants
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
Remarquez le \
à la fin des trois premières lignes d'erreur. Comment faire correctement ?
(Je suis conscient que le fait d'utiliser à la fois "" et le \ dans l'argument d'entrée laisse le \ dans ma variable, mais je suppose que j'en aurais besoin).
J'ai également essayé d'utiliser ./script.sh /Users/me/some\ directoy\ with\ whitespace/
sans les guillemets, puis en rendant le script
echo ${1}
ls "${1}"
mais cela a rendu le echo
ne contient pas de \
maintenant, et le ls
La sortie ressemble à ceci :
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
Remarquez qu'il n'a fait qu'ajouter les guillemets sans sembler les comprendre comme une syntaxe.
C'est en quelque sorte lié à la IFS (séparateur de champ de saisie) car si je fais en sorte que le script
IFS=*
ls ${1}
et l'exécuter en tant que ./script.sh /Users/me/some\ directoy\ with\ whitespace/
il me montre correctement le contenu du répertoire spécifié. Mais je ne sais pas trop pourquoi.