Ho uno spazio in uno dei nomi di directory. Voglio elencare un file sotto di esso da uno script bash. Ecco il mio copione:
fpath="${HOME}/"New Folder"/foobar.txt"
echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"
ls "${fpath}"
L'output di questo script è:
fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory
Ma quando è elencato il file sulla mia shell esiste:
$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt
C'è un modo per ottenere ls
visualizzare il percorso dal mio script?
Risposta accettata:
Basta rimuovere le virgolette interne tra virgolette:
fpath="${HOME}/New Folder/foobar.txt"
Poiché il contenuto completo della variabile è contenuto tra virgolette, non è necessario farlo una seconda volta. Il motivo per cui funziona dalla CLI è che Bash valuta prima le virgolette. Non riesce nella variabile perché le virgolette con escape barra rovesciata vengono trattate come una parte letterale del percorso della directory.