Câu trả lời:
Bạn có thể sử dụng eval:
eval echo ~$USER
Nhưng hãy xem bình luận của Andrew và câu trả lời của glenn bên dưới.
eval echo "~$USER"đang đưa ra giả định $USERkhông chứa các ký tự đặc biệt mà trình bao có thể diễn giải. Ví dụ, nếu USER="foo\$bar", sau đó khi chúng tôi evalshell sẽ thay thế $barvào đầu ra của bạn không phải là những gì bạn muốn. Về cơ bản, nếu bạn đi tuyến đường này, bạn cần chắc chắn rằng đó $USERlà đầu vào lành mạnh. Hầu hết thời gian có thể sẽ có, nhưng bạn nên ghi nhớ điều này.
Điều này có thể làm việc cho bạn:
homedir=$( getent passwd "$USER" | cut -d: -f6 )
Điều này cũng sẽ làm việc trên những người dùng không phải là bạn. Ví dụ,
homedir=$( getent passwd "someotheruser" | cut -d: -f6 )
getenvthay vì giả định vị trí của passwdthậm chí là một bước xa hơn so với giả định vị trí của ngôi nhà là/home/
Có vẻ như bạn là người dùng đó - tại sao không
echo $HOME
?
Tôi không biết có giúp được gì không, nhưng đặt dấu ngã bên ngoài biểu thức hoạt động trên ZSH nhưng không phải trên Bash:
echo ~`echo $USER`
Khi bạn đăng nhập, hãy chạy cdđể vào thư mục chính của bạn, sau đó chạy pwdđể in thư mục làm việc.
echo $HOME.
echo ~$usernamenó là ổn, nhưng trong sh eval là cần thiết nếu là một biến