无法将 SED 输出存储到变量



我是bash script的新手。 我收到一些 json 响应,但我只从响应中得到一个属性。我想将其保存到变量中,但它不起作用 token=$result |sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1 echo $token它返回空行。 我不能使用 jq 或任何第三方工具。 请让我知道我错过了什么。

你的命令应该是:

token=$(echo "$result" | sed -n -e 's/^.*access_token":"//p' | cut -d'"' -f1)

您需要使用echo在标准输出上打印变量的内容,并且需要使用命令替换$( )将管道的输出分配给token

始终鼓励引用变量,以避免出现空格和 glob 字符(如*(的问题。


顺便说一句,请注意,您可能可以使用以下内容获取输出:

token=$(jq -r .access_token <<<"$result")

我知道您说过不能使用jq但它是一个独立的二进制文件(无需安装它(,并以正确的方式处理您的 JSON,而不是任意文本。

试一试:

token="$(sed -E -n -e 's/^.*access_token": ?"//p' <<<"$result" | cut -d'"' -f1)"

解释:

  • token="$( script here )"表示$token设置为通过称为命令替换的过程在子 shell 内运行的脚本的输出/结果
  • sed中的-E允许扩展正则表达式。 我们想要这个,因为 JSON 通常在:之后和下一个"之前包含一个空格。 我们使用空间后面的?来告诉sed空间可能存在,也可能不存在
  • <<<"$result"是一个 herestring ,它将数据作为 stdin 代替文件馈送到sed中。

相关内容

  • 没有找到相关文章

最新更新