Jawaban:
Anda bisa menggunakan eval:
eval echo ~$USER
Tetapi lihat komentar Andrew dan balasan glenn di bawah ini.
eval echo "~$USER"membuat asumsi yang $USERtidak mengandung karakter khusus yang dapat ditafsirkan oleh shell. Misalnya, jika USER="foo\$bar", maka ketika kita evalshell akan menggantikan $barke output Anda yang bukan yang Anda inginkan. Pada dasarnya, jika Anda mengambil rute ini, Anda perlu memastikan bahwa itu $USERadalah input yang waras. Sebagian besar waktu mungkin akan terjadi, tetapi Anda harus mengingat ini.
Ini mungkin bekerja untuk Anda:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Ini juga akan berfungsi pada pengguna yang bukan Anda. Misalnya,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvdaripada mengasumsikan lokasi passwdbahkan selangkah lebih maju daripada mengasumsikan lokasi rumah adalah/home/
Tampaknya Anda adalah pengguna itu - mengapa tidak
echo $HOME
?
Saya tidak tahu apakah itu membantu, tetapi menempatkan tilde di luar ekspresi berfungsi pada ZSH tetapi tidak pada Bash:
echo ~`echo $USER`
Setelah Anda masuk, jalankan cduntuk pergi ke direktori home Anda, kemudian jalankan pwduntuk mencetak direktori yang berfungsi.
echo $HOME.
echo ~$usernameapa-apa, tetapi dalam