Odpowiedzi:
eval echo "~$USER"
przyjmujesz założenie, że $USER
nie zawiera znaków specjalnych, które powłoka może interpretować. Na przykład jeśli USER="foo\$bar"
, to kiedy my, eval
powłoka zastąpi $bar
twój wynik, co nie jest tym, czego chcesz. Zasadniczo, jeśli wybierzesz tę trasę, musisz upewnić się, że $USER
jest 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 )
getenv
zamiast zakładać, że lokalizacja passwd
jest 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, cd
aby przejść do katalogu domowego, a następnie uruchom, pwd
aby wydrukować katalog roboczy.
echo $HOME
.
echo ~$username
jest w porządku, ale w sh eval jest potrzebny, jeśli jest zmienną