YAMLファイルが与えられると、次のようになりますexample.yaml
。
node:
sub_node:
get_this:
get_this
Mike Farahを使って文字列を含む変数を取得したいと思いますyq
。sub_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
そしてマイクパラyq
nodename
、この関数を使用すると、パスの一部として式に入れてユーティリティ環境内のシェル変数の値にアクセスできます。yq
strenv()
$ 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