Respuestas:
Puedes usar eval:
eval echo ~$USER
Pero ver a Andrew 's comentario y Glenn ' s respuesta a continuación.
eval echo "~$USER"está asumiendo que $USERno contiene caracteres especiales que el shell puede interpretar. Por ejemplo, si USER="foo\$bar", entonces cuando evalel shell lo sustituya $baren su salida, que no es lo que desea. Básicamente, si toma esta ruta, debe asegurarse de que $USERsea una entrada sensata. La mayoría de las veces probablemente lo será, pero debes tener esto en cuenta.
Esto podría funcionar para usted:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Esto también funcionará en usuarios que no son usted. Por ejemplo,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvlugar de asumir la ubicación passwdes incluso un paso más allá de asumir que la ubicación de la casa es/home/
Parece que eres ese usuario, ¿por qué no?
echo $HOME
?
No sé si ayuda, pero colocar la tilde fuera de la expresión funciona en ZSH pero no en Bash:
echo ~`echo $USER`
Una vez que inicie sesión, ejecute cdpara ir a su directorio de inicio, luego ejecute pwdpara imprimir el directorio de trabajo.
echo $HOME.
echo ~$usernameestá bien, pero en sh eval es necesario si es una variable