gpt4 book ai didi

json - jq --arg 变量在 select() 中的引用字符串中使用

转载 作者:行者123 更新时间:2023-12-05 00:59:46 41 4
gpt4 key购买 nike

我想使用 -arg jq 参数基于包含 jq 变量 ($ARCH) 的字符串 select() 一个对象。这是从 Google 查找“/bin/linux/$ARCH/kubeadm”时的用例...

# You may need to install `xml2json` IE 
# sudo gem install --no-rdoc --no-ri xml2json and run the script I wrote to do the xml2json:

#!/usr/bin/ruby
# Written by Jim Conner
require 'xml2json'

xml = ARGV[0]

begin
if xml == '-'
xdata = ARGF.read.chomp
puts XML2JSON.parse(xdata)
else
puts XML2JSON.parse(File.read(file2parse).chomp)
end
rescue => e
$stderr.puts 'Unable to comply: %s' % [e.message]
end

然后运行以下命令:

curl -sSL https://storage.googleapis.com/kubernetes-release/ > /var/tmp/k8s.xml | \
xml2json - | \
jq --arg ARCH amd64 '[.ListBucketResult.Contents[] | select(.Key | contains("/bin/linux/$arch/kubeadm"))]'

...返回一个空集,因为 jq 不会在引号内转写。我知道我可以通过使用多个 select/contains() 来解决这个问题,但如果可能的话,我不希望这样做。

jq 可能根本不会这样做,但如果有人知道这样做的方法,我将不胜感激。

最佳答案

jq 确实支持字符串插值,在您的情况下,字符串将是:

"/bin/linux/\($ARCH)/kubeadm"

请注意,这不是 JSON 字符串:"\(" 的出现表明该字符串需要进行插值。非常漂亮。

(或者,您当然可以使用字符串连接:"/bin/linux/"+ $ARCH + "/kubeadm")

顺便说一句,您可能希望在此处避免 contains。它的语义(是?)相当复杂,而且可能违反直觉。考虑使用 startswithindex 或(对于正则表达式匹配)test

关于json - jq --arg 变量在 select() 中的引用字符串中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52672234/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com