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 $USER
khô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 eval
shell sẽ thay thế $bar
và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 đó $USER
là đầ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 )
getenv
thay vì giả định vị trí của passwd
thậ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 ~$username
nó là ổn, nhưng trong sh eval là cần thiết nếu là một biến