Parece que ~ y $HOME son equivalentes en la línea de comandos y secuencias de comandos de shell. Es eso cierto?
Respuestas
¿Demasiados anuncios?Es verdad hasta cierto punto.
-
$HOME
es una expresión para la expansión de la variable de entornoHOME
-
~
(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
yof=/Users/techraf/destination_file
que contiene una ruta de acceso válida a ladd
comando. -
dd if=~/source_file of=~/destination_file
no funcionaShell va a pasar argumentos
if=~/source_file
yof=~/destination_file
a ladd
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.