Ответы:
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 нужен, если есть переменная