首页 > 解决方案 > 如何在另一个命令变量中获取命令变量?

问题描述

这里的例子:

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 中工作?提前致谢!

标签: bashshell

解决方案


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中提取.gitrepo0.json,您也可以以完全相同的方式使用它来.tag_namecurl的输出中提取(而不是使用grepand 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'

推荐阅读