Відповіді:
Ви можете використовувати 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 потрібен, якщо є змінною