J'ai un espace dans l'un des noms de répertoire. Je veux lister un fichier sous celui-ci à partir d'un script bash. Voici mon script :
fpath="${HOME}/"New Folder"/foobar.txt"
echo "fpath=(${fpath})"
#fpath="${HOME}/${fname}"
ls "${fpath}"
La sortie de ce script est :
fpath=(/Users/<username>/"New Folder"/foobar.txt)
ls: /Users/<username>/"New Folder"/foobar.txt: No such file or directory
Mais quand est listé le fichier sur mon shell il existe :
$ ls /Users/<username>/"New Folder"/foobar.txt
/Users/<username>/New Folder/foobar.txt
Existe-t-il un moyen d'obtenir ls
afficher le chemin depuis mon script ?
Réponse acceptée :
Supprimez simplement les guillemets entre guillemets :
fpath="${HOME}/New Folder/foobar.txt"
Étant donné que le contenu complet de la variable est contenu entre guillemets, vous n'avez pas besoin de le faire une seconde fois. La raison pour laquelle cela fonctionne à partir de la CLI est que Bash évalue d'abord les guillemets. Il échoue dans la variable car les guillemets échappés par une barre oblique inverse sont traités comme une partie littérale du chemin du répertoire.