yq コマンドで Bash 変数を置き換える

yq コマンドで Bash 変数を置き換える

YAMLファイルが与えられると、次のようになりますexample.yaml

node:
  sub_node:
    get_this:

get_thisMike Farahを使って文字列を含む変数を取得したいと思いますyqsub_node

yaml="$(cat example.yaml)"
nodename=sub_node
sub_yaml= "$(echo "$yaml" | yq -r '.$nodename' )";
# also tried -> sub_yaml= "$(echo "$yaml" | yq -r '.'"$nodename" )";

これは人為的な例です。実際には文字列sub_nodeを事前に知ることができないので、置き換える必要があります$nodename

必須一重引用符クエリ文字列をエスケープする方法がわからないようですyq

どうすればいいですか?

ベストアンサー1

そしてマイクパラyqnodename、この関数を使用すると、パスの一部として式に入れてユーティリティ環境内のシェル変数の値にアクセスできます。yqstrenv()

$ nodename='sub_node' yq '.node[strenv(nodename)]' example.yaml
get_this:

nodeこれにより、環境変数の値によって提供される最上位キーのサブセクションにアクセスしますnodename

これ避けるシェル変数の値をyq式に挿入します。つまり、ドットやその他の特殊文字を含む名前部分にアクセスできます。


使用アンドレイ・キースリュークyq、次のように内部変数を介してサブキーを渡すことで、同様の操作を実行できます。

$ nodename=sub_node
$ yq -y --arg sect "$nodename" '.node[$sect]' example.yaml
get_this: null

...または環境から値を読む

$ nodename=sub_node yq -y '.node[$ENV.nodename]' example.yaml
get_this: null

おすすめ記事