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 $HOME
vscd ~not-tandu
. Esta pregunta tiene que vercd
vscd ~
.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
$HOME
var o hacer doscd
s. 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/download
para ir al directorio de descarga de un usuario.Hacer
cd
es básicamente llamarcd
sin argumentos y de acuerdo con elcd
comportamiento "... 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 elcd
comando, 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,HOME
se consultará la variable de entorno:Efectivamente, esto tampoco tiene diferencia de
cd $HOME
. Sin embargo, mientrascd
que hará una sola cosa, tilde se puede usar para realizar otras expansiones, como el~+
directorio de trabajo actual.Sin embargo, curiosamente podemos
unset HOME
rompercd
pero~
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
HOME
cadena vacía rompe tanto la tilde como elcd
comportamiento.Tilde y
$HOME
tiene algo de una diferencia y razón diferente para la existencia.$HOME
es 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,tilde
es 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
~
representaHOME
se ha respondido en esta pregunta : una vez el personaje tilde compartió la misma clave conHOME
el terminal Lear-Siegler ADM-3A.HOME
por 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
HOME
sea 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
echo
muestra 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
HOME
sí 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
PWD
yHOME
permanece 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
,dash
ycsh
- todos se comportan igual concd
ocd ~
.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 comandoscd
ycd ~
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$HOME
al escribir uncd
comando. 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
root
El directorio de inicio de Eg , por lo general, está afuera/home