Jawaban:
Anda bisa menggunakan eval
:
eval echo ~$USER
Tetapi lihat komentar Andrew dan balasan glenn di bawah ini.
eval echo "~$USER"
membuat asumsi yang $USER
tidak mengandung karakter khusus yang dapat ditafsirkan oleh shell. Misalnya, jika USER="foo\$bar"
, maka ketika kita eval
shell akan menggantikan $bar
ke output Anda yang bukan yang Anda inginkan. Pada dasarnya, jika Anda mengambil rute ini, Anda perlu memastikan bahwa itu $USER
adalah 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 )
getenv
daripada mengasumsikan lokasi passwd
bahkan 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 cd
untuk pergi ke direktori home Anda, kemudian jalankan pwd
untuk mencetak direktori yang berfungsi.
echo $HOME
.
echo ~$username
apa-apa, tetapi dalam