Відповіді:
Ви можете використовувати eval:
eval echo ~$USER
eval echo "~$USER"робите припущення, що $USERне містить спеціальних символів, оболонка може інтерпретувати. Наприклад, якщо USER="foo\$bar", тоді, коли ми evalоболонку будемо підставляти $barдо вашого результату, це не те, що ви хочете. В основному, якщо ви рухаєтесь цим маршрутом, вам потрібно переконатися, що $USERце введений спосіб. Більшість часу це, мабуть, буде, але ви повинні пам’ятати про це.
Це може допомогти вам:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Це також буде працювати над користувачами, які не ви. Наприклад,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvзамість того, щоб вважати, що місце розташування - passwdце ще крок далі, ніж припускати, що місце проживання є/home/
Здається, ти саме такий користувач - чому ні
echo $HOME
?
Я не знаю, чи допомагає це, але розміщення тильди поза виразом працює на ZSH, але не на Bash:
echo ~`echo $USER`
Після входу в систему запустіть, cdщоб перейти до домашнього каталогу, а потім запустіть, pwdщоб надрукувати робочий каталог.
echo $HOME.
echo ~$usernameце добре, але в sh eval потрібен, якщо є змінною