Sto usando script.sh in un terminale Mavericks di OS X che contiene solo quanto segue:
echo ${1}
ls ${1}
Ora, quando chiamo ./script.sh "/Users/me/some\ directoy\ with\ whitespace/"
, il comando echo stampa /Users/me/some\ directoy\ with\ whitespace/
, ma ls
insiste ancora nel dividere tutto, quindi i risultati sono
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
Notare \
alla fine delle prime tre righe di errore. Come faccio a farlo correttamente?
(Sono consapevole che l'uso di entrambi "" e \ nell'argomento di input lascia la \ nella mia variabile, ma presumo che avrei bisogno di quelli.)
Ho anche provato a usare ./script.sh /Users/me/some\ directoy\ with\ whitespace/
senza virgolette, quindi a creare lo script
echo ${1}
ls "${1}"
ma questo ha reso l'output echo
non contenente alcun \
ora, e l'output ls
assomiglia a questo:
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
Si noti che tutto ciò che ha fatto è stato aggiungere le virgolette senza sembrare capirle come sintassi.
È in qualche modo correlato al IFS (separatore di campo di input) poiché se faccio lo script
IFS=*
ls ${1}
ed eseguirlo come ./script.sh /Users/me/some\ directoy\ with\ whitespace/
, mi mostra correttamente il contenuto della directory specificata. Non sono sicuro del perché, però.