如何扩展包含文本和其他变量混合的变量?

How to expand a variable that contains a mixture of text and other variables?

我正在编写脚本,需要定位当前用户的桌面文件夹。我希望它与语言无关,所以我发现在 Ubuntu 上,您可以在 ~/.config/user-dirs.dirs 中以标记 [=11= 开头的行中找到桌面路径(独立于系统语言) ].

我可以使用 DESK=$(more ~/.config/user-dirs.dirs | grep "XDG_DESKTOP_DIR" | cut -d '"' -f2) 轻松捕获此信息并获取桌面的路径,但问题是我获得了如下内容: $HOME/Desktop 我需要扩展 $HOME 变量.

我是用 eval 做的,但我知道那是糟糕的编码,所以我决定改变它。

所以基本上我试图扩展包含文本和变量混合的变量内的变量。我想要一个没有针对 $HOME 变量进行硬编码的解决方案,因为这不是我第一次发现这个问题。

我已经尝试过 ${!DESK}${${DESK}}(我可以想象为什么这不起作用)、[[ ${escri} ]] 和其他与 echo -e 的组合。

如果有人能帮我解决这个问题,我将不胜感激,因为我记得我第一次写代码时就遇到过这个问题,所以我放弃并使用了邪恶的eval .

最有用的方法是来源~/.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="\(.*\)"//p'
)"