Réponses:
Vous pouvez utiliser eval:
eval echo ~$USER
Mais voir le commentaire d’ Andrew et la réponse de glenn ci-dessous.
eval echo "~$USER"faites l'hypothèse qui $USERne contient pas de caractères spéciaux que le shell peut interpréter. Par exemple, si USER="foo\$bar", alors, evalle shell va substituer $bardans votre sortie ce qui n’est pas ce que vous voulez. Fondamentalement, si vous prenez cette route, vous devez vous assurer que cette $USERentrée est saine. La plupart du temps, ce sera probablement le cas, mais vous devez en tenir compte.
Cela pourrait fonctionner pour vous:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Cela fonctionnera également sur des utilisateurs autres que vous. Par exemple,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvplutôt que de supposer que l’emplacement de la maison passwdest encore plus loin que de supposer que l’emplacement de la maison est/home/
Il semble que vous soyez cet utilisateur - pourquoi pas
echo $HOME
?
Je ne sais pas si cela peut aider, mais placer le tilde en dehors de l'expression fonctionne sur ZSH mais pas sur Bash:
echo ~`echo $USER`
Une fois que vous vous êtes connecté, exécutez cdpour accéder à votre répertoire personnel, puis pwdimprimez le répertoire de travail.
echo $HOME.
echo ~$username, mais c'est correct, mais dans sh eval, une variable est nécessaire