linux - 从 bash 脚本中的 grep 输出扩展环境变量

标签 linux bash

我是 bash 脚本的新手,我只是想让它正常工作。我想要得到的是一个 cd 到默认下载目录的脚本,例如/home/david/Downloads,并在 Ubuntu 中从那里下载文件。我正在获取默认下载目录,例如:

OUTPUT=$(grep DOWNLOAD $HOME/.config/user-dirs.dirs)
DIR=$(echo $OUTPUT | cut -f 2 -d "=" | tr "\"" "\n")

工作正常。 DIR 是一个像这样的字符串:

$HOME/Downloads

当我尝试 cd 到它时出现问题。它的作用类似于:

cd $HOME/Downloads

它会抛出一个错误,而它应该:

cd /home/davide/Downloads

我搜索了很多,在我看来应该完成了扩展。我已经通过使用 eval 命令对其进行了扩展,但它似乎应该是最后的手段。

感谢您的帮助!

最佳答案

使用 gnu 提供的 envsubst 替换 shell 格式字符串中的环境变量:

dir=$(awk -F '["=]+' '/DOWNLOAD/{print $2}' file | envsubst)
echo "$dir"
# will output /home/user/Downloads
cd "$dir"

关于linux - 从 bash 脚本中的 grep 输出扩展环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347991/

相关文章:

json - 文件路径中的正斜杠而不是后斜杠

linux - 使用 bash 访问 getopts 选项中的第二个参数

linux - 从源代码构建软件并将其安装在 Linux 上的自定义文件夹中

c - 文件描述符消失/无效

linux - dos 或 linux 多行搜索和多行替换/添加

同时计算来自多个客户端的数据

linux - bash中有 "goto"语句吗?

linux - 使用 awk 和 grep 提取负/正 float

linux - 无法在 golang 中捕获 upstart 发送的 SIGTERM

java - cronjob 执行时 shell 脚本失败,否则工作正常