$HOME
y ~
generalmente se refieren a lo mismo. Es decir, son la ruta al directorio de "inicio del usuario" que tiene la forma general "/ home / userName".
¿Cuándo, si alguna vez, no se refieren al mismo directorio?
home-directory
H2ONaCl
fuente
fuente
~
depende del shell mientras que $ HOME no lo es.Respuestas:
Tanto
$HOME
y~
apuntan a la misma carpeta, la carpeta de inicio del usuario actual, pero ambos son cosas muy diferentes.$HOME
es una variable de entorno , que está configurada para contener la carpeta de inicio del usuario actual.~
es un símbolo de expansión de shell , es decir, uno de los símbolos que se procesa antes de ejecutar el comando real.~
solo se expande al valor de $ HOME.~nemo
se expande al directorio de inicio del usuarionemo
. Un símbolo de expansión de shell es un carácter (o par de caracteres) que es procesado / interpretado por el shell para construir el comando real. Otro ejemplo de un símbolo de expansión de shell es*
, que se utiliza para expandir nombres de archivos.fuente
~
se expande a $ HOME o% APPDATA% en Windows. Si no están definidos, buscará la ruta en "la base de datos de contraseñas" (que generalmente significa/etc/passwd
, pero podría ser LDAP o alguna otra fuente de datos). Hace unos 20 años, se le podría haber advertido que $ HOME podría no estar configurado en algunas máquinas, mientras que~
se garantizó que se expandiría a algo.~
expande a$HOME
(igual a$HOMEPATH
), no$APPDATA
. Y en cmd.exe,~
no se expande.HOME
es una variable de entorno (un concepto de sistema operativo, en shells sh , por ejemplo, configurado conexport
odeclare -x
), no una variable de shell (la definición de la cual depende completamente de shell, pero en shells sh generalmente se establece confoo=value
o conset
o en algunos otros formas).Una forma en que difieren es en cómo el shell Bash los convierte cuando se incluyen
"
entre comillas.Si usa
echo
así, sin comillas, entonces~
y$HOME
tenga el mismo efecto:Sin embargo, con
"
comillas alrededor de ellos, el resultado difiere:fuente
~
solo se expande como parte de un prefijo tilde que, por definición, debe comenzar al comienzo de la palabra. Además, como alguna vez fue parte de los patrones globales,~
no funcionará entre comillas dobles. Entonces,"~"
oa~b
dará como resultado un valor literal de~
ser preservado.Un solo
~
(o~
seguido de a/
) se expandirá a la casa del usuario actual:A
~
seguido de un nombre de usuario se expandirá a la carpeta de inicio de ese usuario:A
~
seguido de a+
o a-
y un número opcional se expandirán a elementos de la pila de directorios :$HOME
es el equivalente de un solo~
, que en su lugar sigue las reglas de sintaxis para las variables Por ejemplo, se expande entre comillas dobles, se puede desarmar y se le pueden aplicar operandos de manipulación de cadenas .fuente
Esto depende mucho de lo que hace la expansión. En bash,
~
es una forma conveniente de obtener el directorio de inicio sin activar la expansión del nombre de archivo o la división de palabras, aunque no esté entre comillas. Por ejemplo:O:
Entonces, si estás luchando con citas por alguna razón (en cuyo caso realmente deberías repensar todo el asunto, es más fácil luchar con los cerdos),
~
podría ser más conveniente.En otros lugares, en Python, por ejemplo,
~
y$HOME
tienen que ampliarse con diferentes funciones . Algunos otros lugares permiten variables y no permiten otra sintaxis de shell como comodines o expansión de tilde (por ejemplo~/.pam_environment
, que tiene una sintaxis especial para la expansión de variables). Sin embargo, otros lugares permiten la expansión de tilde como una excepción (por ejemplo, systemd ), pero consultan la base de datos passwd directamente en lugar de usar$HOME
.fuente
$HOME
, pero no puede (directamente) cambiar el valor de~
.$HOME
y~
no referirse a lo mismo, normalmente lo hacen de manera predeterminada, y luego se asigna deliberadamente a la variable de entorno para que no se refieran a lo mismo. Esta es una buena demostración pero innecesariamente confusa.$ HOME / es más probable que funcione en POSIX.2 estándar Bourne / bin / sh ya que la expansión tilde es una extensión que se encuentra en BSD csh tcsh GNU bash y otros.
Si desea escribir scripts portátiles en busybox o dash o BSD sh, invierta en las letras adicionales para que no se bloquee con ~ /: No existe dicho archivo o directorio en ciertos sistemas.
También encuentro $ HOME / más legible.
fuente
$HOME
y rara vez usan~
. Mi antiguo yo probablemente lo sabía.