Me pregunto, si solo el CD me envía a mi carpeta de inicio y el CD ~ hace lo mismo, ¿por qué se agregó el ~ en primer lugar entonces?
¿Es algo específico de BASH o se comportarían de manera diferente en otro Shell?
                    
                        cd-command
                                home
                                
                    
                    
                        Luis Alvarado
fuente
                
                fuente

cd ~vscd $HOMEvscd ~not-tandu. Esta pregunta tiene que vercdvscd ~.Respuestas:
Se
~puede usar para algo más que eso. Cualquier comando puede beneficiarse de tener un acceso directo a la carpeta de inicio. Por lo tanto, no es necesario si desea cd en su hogar, pero ¿qué pasa~/.config?De lo contrario, tendría que escribir la ruta de inicio, usar la
$HOMEvar o hacer doscds. También para copiar o mover archivos:Como la mayoría de sus archivos están en el hogar, siempre es bueno tener un acceso directo.
fuente
~es hacercd ~user/downloadpara ir al directorio de descarga de un usuario.Hacer
cdes básicamente llamarcdsin argumentos y de acuerdo con elcdcomportamiento "... si no se proporciona dir, el valor de la variable de shell HOME es el predeterminado". (del manual bash ). Por el contrario,cd ~es cuando proporciona un argumento para elcdcomando, que es~y shell realizará una expansión de tilde . En cuanto a volver al directorio de inicio del usuario, no hay diferencia. En cualquier caso,HOMEse consultará la variable de entorno:Efectivamente, esto tampoco tiene diferencia de
cd $HOME. Sin embargo, mientrascdque hará una sola cosa, tilde se puede usar para realizar otras expansiones, como el~+directorio de trabajo actual.Sin embargo, curiosamente podemos
unset HOMErompercdpero~aún funcionará:Por qué ? Nuevamente, responda en el manual:
Tenga en cuenta que desarmar es diferente a hacer una variable vacía
HOME=y tiene efecto. La documentación habla específicamente sobre la variable de desarmado. Hacer que la variable sea igual a una cadena vacía tiene un efecto opuesto al que esperaríamos:Aquí puede ver que hacer una
HOMEcadena vacía rompe tanto la tilde como elcdcomportamiento.Tilde y
$HOMEtiene algo de una diferencia y razón diferente para la existencia.$HOMEes una variable de shell, que casualmente también es una de las variables de entorno, y que está disponible para todos los programas; en C usaríasenviron()para acceder a eso. Por el contrario,tildees una sintaxis específica de shell que realiza la expansión de tilde, aunque también puede usar lawordexp()función para realizar una expansión ( referencia ) similar a shell en C.La razón por la cual
~representaHOMEse ha respondido en esta pregunta : una vez el personaje tilde compartió la misma clave conHOMEel terminal Lear-Siegler ADM-3A.HOMEpor el contrario, es una variable de entorno que tenía un significado puramente simbólico y no tenía representaciones físicas.Además, el hecho de que
HOMEsea una variable de entorno nos permite desarmarla, ya que no podemos establecer~otra cosa por medios simples.Observe la línea en blanco donde primero se
echomuestra la variable no establecida, y el hecho de que. Por el contrario, no podemos hacer cosas como esta para tilde:Sin embargo, la alteración
HOMEsí afecta~:Además, como
~también funciona como personaje de expansión, podemos hacer cosas como esta para mostrar el directorio de trabajo actual:Mientras que si queremos hacer eso a través de variables de entorno, necesitamos
PWDyHOMEpermanece igual, o si haces cosas comoecho $HOME+eso, eso es simplemente concatenación de cadenas / variables. Pero nuevamente,~+saca información de las variables de entorno:NOTA : las expansiones
~+y~-funcionan enksh, pero no endash.Para responder algunas de sus preguntas específicas:
No, esto debería ser un comportamiento consistente.
ksh,dashycsh- todos se comportan igual concdocd ~.Diría conveniencia y razones históricas como se explica en la respuesta vinculada sobre tilde. Finalmente, creció para realizar más que solo la expansión del directorio de inicio.
fuente
Independientemente de si usted está varios niveles de carpetas encima o por debajo
$HOME, los comandoscdycd ~hacer lo mismo, y no difieren - se le enviará de vuelta a su directorio personal.SIN EMBARGO: cuando tiene 1 o más niveles de carpeta por encima de INICIO y desea ir DIRECTAMENTE a un subdirectorio 1 o más niveles de carpeta a continuación
$HOME, tilde (~) es útil al guardar las pulsaciones de teclas cuando se usa para sustituir el texto necesario para referirse a$HOMEal escribir uncdcomando. Por ejemplo;fuente
~ significa / home / nombre de usuario, por lo que ahorra algo de tiempo al escribir. Por ejemplo, cd / home / username / Downloads es lo mismo que cd ~ / Downloads, pero escribe menos. Ambos comandos hacen lo mismo, cambian el directorio de trabajo a esa ubicación.
fuente
rootEl directorio de inicio de Eg , por lo general, está afuera/home