来自curl的bash脚本变量

来自curl的bash脚本变量

我想我在这里遗漏了一些简单的东西,但是就这样。

这可以从命令行正常工作,它给了我所需的输出。

curl -X GET \
     -H "X-Auth-Email: REDACTED" \
     -H "X-Auth-Key: REDACTED" \
     "https://api.cloudflare.com/client/v4/zones/aa5ac150d414359642d85f1aa434e5db/filters" | jq -r '.result[0] .id'

但是,当我尝试在 bash 脚本中使用它时,我根本没有得到任何输出

FWRID="$(curl -X GET \
     -H "X-Auth-Email: REDACTED" \
     -H "X-Auth-Key: REDACTED" \
     "https://api.cloudflare.com/client/v4/zones/aa5ac150d414359642d85f1aa434e5db/filters")" | jq -r '.result[0] .id'

echo "$FWRID"

非常感激任何的帮助。

答案1

在第二个命令中,您在管道到 之前结束命令替换jq。该调用jq会解析出您想要的值,因此它应该是命令替换的一部分:

FWRID=$(
    curl -X GET \
        -H 'X-Auth-Email: REDACTED' \
        -H 'X-Auth-Key: REDACTED'   \
        'https://api.cloudflare.com/client/v4/zones/aaxxx/filters' |
    jq -r '.result[0] .id'
)

在原始命令中,jq在命令替换之外,jq将读取变量赋值的输出FWID并从中产生一些结果。由于分配不会产生任何输出,因此它根本没有做任何有趣的事情。

此外,由于原始命令中的分配是管道的一部分,因此它在子 shell 中运行,因此在稍后的$FWID调用中该值为空(或至少未更改)echo

相关内容