我想我在这里遗漏了一些简单的东西,但是就这样。
这可以从命令行正常工作,它给了我所需的输出。
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
。