La commande Bash
cd -
imprime le répertoire précédemment utilisé et y apporte des modifications.
D'autre part, la commande Bash
cd ~-
modifie directement le répertoire précédemment utilisé, sans rien répercuter.
Est-ce la seule différence? Quel est le cas d'utilisation de chacune des commandes?
cd ~-
.Réponses:
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 lacd
section deman bash
(souligné par moi):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":Cela pourrait être plus facile à comprendre avec un exemple:
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 fonctioncd
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 pouvezecho ~-
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"/* .
la source
set -x
imprimer la commande développée avant de l'exécuter peut être utile pour illustrer la différence (ou peut-être simplement trop bruyant lorsque vous ne le faites pas vous-même, étape par étape).cd ~-/..
marchecd -/..
pas!~-
est sujet à l'expansion du tilde (voir man bash), donc ce quicd
est vu est le nom du répertoire précédent directement.-
n'est pas développé par le shell, lecd
voit directement et se comporte comme indiqué:la source
TL; DR:
cd -
est intégré àcd
,~-
est une extension ultérieure de~[name]
, non spécifique àcd
.POSIX.1-2008 Shell & Utilities définit
cd -
comme un cas spécial spécifique à lacd
commande :L'
~-
extension sera développée$OLDPWD
avant toute commande et peut être transmise comme argument d'une commande, pas seulementcd
. C'est une extension ultérieure en ksh et bash .La norme POSIX.1-2008 Shell & Utilities susmentionnée contient également une explication détaillée de l’extension Tilde . La formulation est très spécifique pour permettre
~-
un comportement indéfini dans le champ d'application de la norme, où~[name]
fait référence à$HOME
si[name]
est la chaîne vide, ou au répertoire de base de l'utilisateurname
siname
est un nom d'utilisateur valide.la source