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

Ale*_*iné 0 bash shell ubuntu environment-variables variable-expansion

我正在编写一个脚本,我需要找到当前用户的桌面文件夹。我希望它与语言无关,所以我发现在 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.

如果有人能帮助我解决这个问题,我将不胜感激,因为我记得我第一次编写代码时就已经遇到了这个问题,这就是我放弃并使用 wicked 的原因eval

Léa*_*ris 5

最有用的方法是来源 ~/.config/user-dirs.dirs

. ~/.config/user-dirs.dirs

# Variable is now readily available
echo "$XDG_DESKTOP_DIR"
Run Code Online (Sandbox Code Playgroud)

另一种方法是envsubst在解析文件之前使用扩展环境变量:

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