如何扩展包含文本和其他变量混合的变量?
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'
)"
我正在编写脚本,需要定位当前用户的桌面文件夹。我希望它与语言无关,所以我发现在 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'
)"