Il y a deux choses en jeu ici. Tout d'abord, le -
seul est étendu à votre répertoire précédent. Ceci est expliqué dans la cd
section de man bash
(souligné par moi):
Un argument de -
est converti en $ OLDPWD avant la tentative de modification du répertoire. Si un nom de répertoire non vide de CDPATH est utilisé ou s'il -
s'agit du premier argument et que le changement de répertoire a abouti, le chemin absolu du nouveau répertoire de travail est écrit dans la sortie standard. La valeur de retour est true si le répertoire a été modifié avec succès; faux sinon.
Ainsi, un simple cd -
vous ramènera à votre répertoire précédent et imprimera le nom du répertoire. L'autre commande est documentée dans la section "Extension de tilde":
Si le préfixe tilde est a ~+
, la valeur de la variable shell PWD remplace le préfixe tilde. Si le préfixe tilde est a ~-
, la valeur de la variable shell OLDPWD, si elle est définie, est remplacée. Si les caractères suivant le tilde dans le préfixe tilde se composent d’un nombre N, éventuellement préfixé par un +
ou un -
, le préfixe tilde est remplacé par l’élément correspondant de la pile de répertoires, tel qu’il serait affiché par les répertoires internes invoqués avec le préfixe tilde comme argument. Si les caractères suivant le tilde dans le préfixe tilde consistent en un nombre sans préfixe +
ou -
, +
est supposé.
Cela pourrait être plus facile à comprendre avec un exemple:
$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~ ## prints $HOME
/home/terdon
$ echo ~+ ## prints $PWD
/etc
$ echo ~- ## prints $OLDPWD
/home/terdon/foo
Donc, en général, cela -
signifie "le répertoire précédent". C’est pourquoi, cd -
par lui-même, vous pourrez revenir où que vous soyez.
La principale différence est que cela cd -
est spécifique à la fonction cd
intégrée. Si vous essayez, echo -
cela imprimera simplement un -
. Le ~-
fait partie de la fonctionnalité d'extension tilde et se comporte de la même manière qu'une variable. C'est pourquoi vous pouvez echo ~-
et obtenir quelque chose de significatif. Vous pouvez également l'utiliser, cd ~-
mais vous pouvez également l'utiliser dans toute autre commande. Par exemple, cp ~-/* .
ce qui équivaudrait àcp "$OLDPWD"/* .
cd ~-
.