Odpowiedzi:
eval echo "~$USER"przyjmujesz założenie, że $USERnie zawiera znaków specjalnych, które powłoka może interpretować. Na przykład jeśli USER="foo\$bar", to kiedy my, evalpowłoka zastąpi $bartwój wynik, co nie jest tym, czego chcesz. Zasadniczo, jeśli wybierzesz tę trasę, musisz upewnić się, że $USERjest to rozsądny wkład. Prawdopodobnie tak będzie przez większość czasu, ale należy o tym pamiętać.
To może Ci pomóc:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Będzie to również działać na użytkownikach, którzy nie są tobą. Na przykład,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvzamiast zakładać, że lokalizacja passwdjest o krok dalej niż zakładać, że lokalizacja domu to/home/
Wygląda na to, że jesteś tym użytkownikiem - dlaczego nie
echo $HOME
?
Nie wiem, czy to pomaga, ale umieszczenie tyldy poza wyrażeniem działa na ZSH, ale nie na Bash:
echo ~`echo $USER`
Po zalogowaniu uruchom, cdaby przejść do katalogu domowego, a następnie uruchom, pwdaby wydrukować katalog roboczy.
echo $HOME.
echo ~$usernamejest w porządku, ale w sh eval jest potrzebny, jeśli jest zmienną