4

Я не могу понять, как префикс строки (например, "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

2 ответа2

6

Если каталог вашего пользователя не просто /home/user , вы можете использовать eval в своем скрипте (источник):

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

Это общий способ получить bash для переоценки, но использование eval может быть лучше, так как оно не будет порождать новый процесс. (эхо встроено в Bash, поэтому не новый процесс)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .