bash - 如何在另一个命令变量中获取命令变量?
问题描述
这里的例子:
gitrepo=$(jq -r '.gitrepo' 0.json)
releasetag=$(curl --silent ""https://api.github.com/repos/\"$gitrepo\""/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
echo "$releasetag"
用于\"
转义字符。
0.json:
{
"type": "github-releases",
"gitrepo": "ipfs/go-ipfs"
}
如何让 $gitrepo 在 $releasetag 中工作?提前致谢!
解决方案
Bash 变量在带引号"
的字符串内展开。
gitrepo="$(jq -r '.gitrepo' 0.json)"
releasetag="$(
curl --silent "https://api.github.com/repos/$gitrepo/releases/latest" \
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/'
)"
echo "$releasetag"
顺便说一句,当您用于从jq
中提取.gitrepo
时0.json
,您也可以以完全相同的方式使用它来.tag_name
从curl
的输出中提取(而不是使用grep
and sed
),如下所示:
gitrepo="$(jq -r '.gitrepo' 0.json)"
releasetag="$(
curl --silent "https://api.github.com/repos/$gitrepo/releases/latest" \
| jq -r '.tag_name'
)"
echo "$releasetag"
为了进一步简化它(取决于您的用例),只需编写:
curl --silent "https://api.github.com/repos/$(jq -r '.gitrepo' 0.json)/releases/latest" \
| jq -r '.tag_name'
推荐阅读
- ruby-on-rails - 如何从控制器的每个动作中渲染一个通用的 JS?
- deep-learning - CNN 中的数据流
- java - 带有 return 语句的方法不返回任何内容
- sql - 如何使用 SQLAlchemy 选择 PostgreSQL 系统列?
- apify - 如何使用 PhantonJS Scraper 在 Pagefunction 中访问 Apify SDK
- javascript - 使用反应导航的状态栏颜色
- docker - 如何获取被杀死的容器的日志
- flurry - 在 Flurry Analytics 中使用 userID 跟踪用户
- rust - 比较 Cell 内部引用的非复制枚举
- azure - 从 Dynamics 365 插件访问非 Azure Web API(本地托管在 IIS 中)