Bash 前缀字符串用波浪符号扩展至主目录

Bash 前缀字符串用波浪符号扩展至主目录

我不知道如何在字符串(例如“user1”)前面加上波浪符号(~)来生成~user1并扩展到 user1 的主目录。

以下是我现在所拥有的:

USER="user1"
ls ~${USER}
ls: cannot access ~user1: No such file or directory

~user1未展开。我该如何实现?

编辑

这不起作用:

$ cat test.sh
USER="user1"
ls $(~$USER)

$ sh -x test.sh
+ USER=user1
+ ~user1
test.sh: 1: ~user1: not found
+ ls
test.sh

答案1

如果您的用户目录不是简单的/home/user,您可以eval在脚本中使用(来源):

USER_HOME=$(eval echo ~${USER})
echo ${USER_HOME}

答案2

这是让 bash 重新评估的通用方法,但使用 eval 可能更好,因为它不会产生新进程。(echo 内置于 bash,因此不是新进程)

user="user1"
bash -c "ls ~${user}"

相关内容