如何在另一个命令变量内获得命令变量?

  • 本文关键字:变量 命令 另一个 bash shell
  • 更新时间 :
  • 英文 :


示例:

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"
}

如何将$ giitrepo放入$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"

Btw,当您使用jq0.json提取.gitrepo时,您也可以使用它以完全相同的方式从curl的输出中提取.tag_name(而不是使用grepsed),如下所示:

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'