J'écris mon premier script donc je suis sûr que c'est une question basique, mais quelqu'un peut-il m'expliquer pourquoi je peux :
cd ~
cd bin
cd ~/bin
cd 'bin'
Mais non
cd '~'
cd '~/bin'
J'ai besoin de cd
à un chemin de répertoire avec un espace dans l'un des noms de répertoire, j'ai donc besoin des guillemets (c'est Windows Program Files
sous le vin). Je peux le contourner avec deux cd
commandes, mais pourquoi ne puis-je pas mettre ~
entre guillemets ?
Si je tape cd '~'
(ou cd "~"
) J'obtiens :
bash: cd: ~: No such file or directory
Réponse acceptée :
Comme @karel l'a noté dans sa réponse, ~
est un caractère spécial et étendu par Bash dans le répertoire personnel de l'utilisateur actuel. Consultez le manuel de Bash sur "Tilde Expansion", ou recherchez le titre "Tilde Expansion" dans la page de manuel (man bash
).
Tout type de citation autour du ~
empêche cette expansion de tilde.
Pour répondre à votre question sur la façon dont vous pouvez toujours l'utiliser pour cd
dans un répertoire avec des espaces dans son nom, il y a quelques alternatives :
-
Omettez les guillemets et remplacez les espaces par des barres obliques inverses :
cd ~/foo/spaces are cool/bar
-
Citez le reste du chemin, mais omettez-les autour du tilde et de la première barre oblique :
cd ~/"foo/spaces are cool/bar"
Comme vous le voyez, vous pouvez concaténer des chaînes entre guillemets et sans guillemets dans Bash en les écrivant simplement les unes à côté des autres sans aucun espace entre elles.
-
Utilisez la variable d'environnement
$HOME
au lieu du tilde, qui est toujours développé à l'intérieur de "guillemets doubles" (mais pas de "guillemets simples") :cd "$HOME/foo/spaces are cool/bar"