El comando Bash
cd -
imprime el directorio utilizado anteriormente y lo modifica.
Por otro lado, el comando Bash
cd ~-
cambia directamente al directorio utilizado anteriormente, sin hacer eco de nada.
¿Es esa la única diferencia? ¿Cuál es el caso de uso de cada uno de los comandos?
bash
directory
cd-command
pushd
dr01
fuente
fuente

cd ~-.Respuestas:
Hay dos cosas en juego aquí. Primero, el
-solo se expande a su directorio anterior. Esto se explica en lacdsección deman bash(énfasis mío):Entonces, un simple
cd -lo moverá de regreso a su directorio anterior e imprimirá el nombre del directorio. El otro comando está documentado en la sección "Expansión de Tilde":Esto podría ser más fácil de entender con un ejemplo:
Entonces, en general,
-significa "el directorio anterior". Escd -por eso que por sí solo lo llevará de regreso a donde sea que esté.La principal diferencia es que
cd -es específica de lacdconstrucción. Si lo intentasecho -, solo imprimirá a-. El~-es parte de la funcionalidad de expansión tilde y se comporta de manera similar a una variable. Es por eso que puedesecho ~-y obtienes algo significativo. También puede usarlo,cd ~-pero podría usarlo en cualquier otro comando. Por ejemplo,cp ~-/* .que sería equivalente acp "$OLDPWD"/* .fuente
set -ximprimir el comando expandido antes de ejecutarlo puede ser útil para ilustrar la diferencia (o puede ser indescifrablemente ruidoso cuando no lo está haciendo usted mismo paso a paso).cd ~-/..funciona,cd -/..no lo hace!~-está sujeto a la expansión de tilde (ver man bash), entonces lo quecdve es el nombre del directorio anterior directamente.-el shell no lo expande, locdve directamente y se comporta como se documenta:fuente
TL; DR:
cd -está integradocd,~-es una extensión posterior de~[name], no específico decd.POSIX.1-2008 Shell & Utilities se define
cd -como un caso especial que es específico para elcdcomando :La
~-extensión se expandirá$OLDPWDantes de que se ejecute cualquier comando y se puede pasar como argumento para cualquier comando, no solocd. Es una extensión posterior en ksh y bash .El estándar POSIX.1-2008 Shell & Utilities mencionado anteriormente también tiene una explicación detallada de la expansión de Tilde . La redacción es muy específica para permitir
~-un comportamiento indefinido dentro del alcance del estándar, donde se~[name]refiere a$HOMEsi[name]es la cadena vacía o al directorio de inicio del usuarionamesinamees un nombre de usuario válido.fuente