我有一个bash脚本,它正在用artifacthub更新一个helm yaml文件。io注释。然而,我的脚本使用的变量,我认为,需要命令使用双引号而不是单引号。同样,artifacthub.io
会导致工件和io分离的问题。更新"changes
"one_answers"images
"注释,可以使用哪条yq
命令?我也试过使用sed
,但无济于事。
annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |
- name: transmission
image: ghcr.io/linuxserver/transmission:3.00-r0-ls75
我尝试了下面的方法,但是没有成功。
image=foo
yq e ".annotations."artifacthub.io/images"="${image}"" -i "${chart_file_path}"
为了使yq查询尽可能具有可读性,我尽量避免转义双引号。通过在yq查询周围使用单引号,不需要转义双引号。此外,单引号可以关闭并重新打开,以将bash变量连接到查询。
对于带有特殊字符的键,需要将它们括在双引号中括号和:.annotations.["artifacthub.io/images"]
给定文件:
# file.yml
annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |
- name: transmission
image: ghcr.io/linuxserver/transmission:3.00-r0-ls75
执行此脚本:
image="foo"
yq eval '.annotations.["artifacthub.io/images"] = "'${image}'"' file.yml
# | | | || |||
# | | | || ||└> (a.1) close yq query
# | | | || |└> (c) end string value
# | | | || └> (a.2) open yq query (end concatenation)
# | | | |└> (a.2) close yq query (start concatenation)
# | | | └> (c) start string value
# | | └> (b) end key w/ special chars
# | └> (b) start key w/ special chars
# └> (a.1) open yq query
生成以下输出:
annotations:
artifacthub.io/changes: |
- Fixed linting issues.
artifacthub.io/images: |-
foo