~
es un alias $HOME
proporcionado por una serie de shells, pero $HOME
es más universal. $HOME
en realidad le pide al shell que inserte (sustituya) la variable ambiental HOME aquí. Hay muchas variables ambientales diferentes que se pueden sustituir, intente ejecutar env
una lista. Tenga en cuenta que ~
no siempre se reconoce cuando no está al comienzo de una palabra. Pruebe estos dos comandos para comparar:
ls /~
ls /$HOME
El primero se pasa al ejecutable ls, /~
que luego intenta mirar un archivo llamado ~
en el directorio raíz, el segundo se expande $HOME
y se convierte en el //home/user
que luego se pasa al ejecutable ls como un argumento de línea de comandos. Todos los sistemas POSIX (POSIX es el estándar sobre cómo funcionan los sistemas UNIX y Linux) permiten que las barras múltiples se traten de la misma manera que una barra diagonal, //home/user
es lo mismo que decir /home/user
. ~username
es un acceso directo para decirle al shell que busque el nombre de usuario en el archivo passwd y que devuelva su directorio de inicio. No hay una variable de entorno equivalente. Todas estas sustituciones son realizadas por el shell y son compatibles con la mayoría de ellas, pero solo $HOME
todas las shells garantizan que solo las variables de entorno sean compatibles. También,cd
es en realidad un comando incorporado. Es una directiva especial que le dice al propio shell que cambie los directorios. No es como otras funciones integradas de shell que se pueden implementar como un ejecutable separado como echo
porque se usa para cambiar un atributo fundamental del proceso de shell. echo
es simplemente un shell integrado por razones de rendimiento, pero en los viejos tiempos de UNIX, solo estaba disponible como su propio ejecutable /bin/echo
.