Как расширить переменную, которая содержит смесь текста и других переменных? - PullRequest
0 голосов
/ 19 апреля 2020

Я пишу скрипт, и мне нужно найти папку рабочего стола текущего пользователя. Я хочу, чтобы он не зависел от языка, поэтому я обнаружил, что в Ubuntu вы можете найти путь к рабочему столу (независимо от языка системы) в ~/.config/user-dirs.dirs в строке, начинающейся с тега XDG_DESKTOP_DIR.

Я могу легко получить эту информацию, используя DESK=$(more ~/.config/user-dirs.dirs | grep "XDG_DESKTOP_DIR" | cut -d '"' -f2), и получить путь к рабочему столу, но проблема в том, что я получаю что-то вроде этого: $HOME/Desktop, и мне нужно расширить переменную $ HOME.

Я делал это с eval, но я знаю, что это плохое кодирование, поэтому я решил изменить его.

Итак, в основном я пытаюсь расширить переменную, которая находится внутри переменной, содержащей смесь текста и переменных. Я хотел бы иметь решение для этого, которое не жестко закодировано для переменной $HOME, потому что это не первый раз, когда я нахожу эту проблему.

Я уже пробовал ${!DESK}, ${${DESK}} ( Я могу себе представить, почему это не работает), [[ ${escri} ]] и другие в сочетании с echo -e.

Я был бы очень признателен, если бы кто-нибудь смог мне помочь с этой проблемой, поскольку я помню, что у меня уже была эта проблема при первом написании кода, поэтому я сдался и использовал злой eval.

1 Ответ

5 голосов
/ 20 апреля 2020

Самый полезный способ - получить ~/.config/user-dirs.dirs

. ~/.config/user-dirs.dirs

# Variable is now readily available
echo "$XDG_DESKTOP_DIR"

Другой способ - использовать envsubst для расширения переменных среды перед анализом файла:

desktop_dir="$(
  envsubst < ~/.config/user-dirs.dirs |
   sed -n 's/XDG_DESKTOP_DIR="\(.*\)"/\1/p'
)"
...