10 votos

Cualquier diferencia entre ~ y $HOME?

Parece que ~ y $HOME son equivalentes en la línea de comandos y secuencias de comandos de shell. Es eso cierto?

13voto

haiggoh Puntos 73

Es verdad hasta cierto punto.

  • $HOME es una expresión para la expansión de la variable de entorno HOME
  • ~ (tilde) es un componente de la expansión de la shell véase la nota de pie de página

Cuando se utiliza como un argumento de comando y en la separación de otras cadenas, $HOME y ~ son generalmente equivalentes.

Pero hay casos en que se diferencian:

  • si la cadena que contiene tanto es citado, por ejemplo:

    # echo "My home directory is $HOME"
    My home directory is /Users/techraf
    # echo "My home directory is ~"
    My home directory is ~
    
  • si se concatena una cadena, por ejemplo:

    • dd if=${HOME}/source_file of=${HOME}/destination_file de trabajo.

      Shell va a pasar argumentos if=/Users/techraf/source_file y of=/Users/techraf/destination_file que contiene una ruta de acceso válida a la dd comando.

    • dd if=~/source_file of=~/destination_file no funciona

      Shell va a pasar argumentos if=~/source_file y of=~/destination_file a la dd comando y se informará de un error ya que no se interpretar ~.


nota a pie de página:

De hecho, ~ forma predeterminada, se reemplaza con el valor de HOME, pero si HOME está vacía, se resuelve en un directorio de inicio:

# echo $HOME
/Users/techraf
# export HOME=/dummy
# echo $HOME
/dummy
# echo ~
/dummy

# unset HOME
# echo $HOME

# echo ~
/Users/techraf

De man bash:

Tilde Expansión

Si una palabra comienza con un sin comillas carácter de tilde (`~'), todos los caracteres que preceden a la primera sin comillas barra (o todos los personajes, si no hay no cotizados barra) son considerados un símbolo de prefijo. Si ninguno de los personajes de la tilde-prefijo que se citan, los personajes de la tilde-prefijo tras la tilde se tratan como un posible nombre de inicio de sesión. Si este nombre de inicio de sesión es la cadena nula, la tilde se reemplaza con el valor del parámetro de shell de INICIO.

Si la CASA no está definida, el directorio home del usuario que ejecuta el shell es sustituido en su lugar. De lo contrario, la tilde-prefijo es reemplazado con el directorio de inicio asociado con el especificado de nombre de inicio de sesión.

0voto

Aaron N. Tubbs Puntos 1019

$HOME está disponible en el inicio de sesión primeras etapas cuando ~ no está disponible. La razón es que $HOME se define por el sistema de medio ambiente, y ~ es un shell de acceso directo. Por eso, $HOME es preferido por los shell scripts.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X