GNU/Linux >> Tutoriels Linux >  >> Linux

Espaces pour les variables dans le script bash ?

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.


Linux
  1. Comment déboguer un script bash ?

  2. Comment ajouter des nouvelles lignes dans des variables dans un script bash ?

  3. Utiliser l'extension .sh ou .bash pour les scripts bash ?

  4. Pourquoi je ne peux pas échapper aux espaces sur un script bash ??

  5. Vérification des variables d'environnement

Bash pour la boucle

35 exemples de scripts bash

Comment exécuter un script bash

Script bash pour la boucle expliqué avec des exemples

Raccourci Shell/Bash pour renommer en bloc des fichiers dans un dossier

Comment grep pour unicode � dans un script bash