我有以下 JSON 結構:
{
"host1": "$PROJECT1",
"host2": "$PROJECT2",
"host3" : "xyz",
"host4" : "$PROJECT4"
}
以及 shell 中的以下環境變數:
PROJECT1="randomtext1"
PROJECT2="randomtext2"
PROJECT4="randomtext3"
我想檢查每個鍵的值,如果它們中有“$”字符,請將它們替換為各自的環境變數(已存在于 shell 中),以便使用正確的環境變數呈現我的 JSON 模板。
我可以使用--argsjq 選項,但在我想要呈現的實際 JSON 模板中有相當多的變數。
我一直在嘗試以下方法:
jq 'with_entries(.values as v | env.$v)
基本上將每個值作為一個變數,然后用來自 env 物件的變數更新它的值,但似乎我錯過了一些理解。有沒有一種直接的方法來做到這一點?
uj5u.com熱心網友回復:
您需要export通過jq以下方式查看 Bash 變數:
export PROJECT1="randomtext1"
export PROJECT2="randomtext2"
export PROJECT4="randomtext3"
然后你可以去:
jq -n 'with_entries((.value | select(startswith("$"))) |= env[.[1:]])'
并得到:
{
"host1": "randomtext1",
"host2": "randomtext2",
"host3": "xyz",
"host4": "randomtext3"
}
uj5u.com熱心網友回復:
匯出大量 shell 變數可能不是一個好主意,也不能解決陣列值變數的問題。因此,最好考慮將變數=值詳細資訊列印到檔案,然后將該檔案與模板組合。這很容易做到,互聯網上的例子比比皆是,可能在 SO 上也有。例如,您可以printf像這樣使用:
printf "%s\t" ${BASH_VERSINFO[@]}
3 2 57 1
您可能還會發現declare -p有幫助。
另見https://github.com/stedolan/jq/wiki/Cookbook#arbitrary-strings-as-template-variables
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/373048.html
