Как расширить переменную, содержащую текст и другие переменные?

Я пишу сценарий, и мне нужно найти папку на рабочем столе текущего пользователя. Я хочу, чтобы он не зависел от языка, поэтому я обнаружил, что в 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 .

# environment-variables variable-expansion
Источник
Codelisting
за 5 против
Лучший ответ

Самый полезный способ - найти~/.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'
)"
  • 0
    Еще одно полезное использование envsubst проголосовало за. кое-что узнал из этого.
  • 0
    Я попробовал первое предложенное решение, и оно полностью сработало для меня. Я собираюсь использовать его вместо envsubst потому что я делаю больше манипуляций, используя содержимое этого файла. Большое спасибо!
Codelisting
Популярные категории
На заметку программисту