Shell-Script

將變數導入jq

  • December 2, 2019

我們需要在以下命令中使用變數$domain_name而不是字元串:hyb.com``jq

jq --argjson IDS '['"$(seq -s, -f'"car%02.0f_hyb.com"' 11)"']' '
 .mazda |= $IDS
' file.json

當我們只是將變數設置為

export domain_name=_hyb.com

jq --argjson IDS '['"$(seq -s, -f'"car%02.0f$domain_name "' 11)"']' '
 .mazda |= $IDS
' file.json

然後導出的變數domain_name是看不到的jq。有沒有關於如何將變數導入的建議jq

您正在使用$domain_name單引號。這就是 shell 不擴展變數的原因。

不過,在這種情況下,我建議以稍微不同的方式進行操作:

jq提供從 shell 導入原始數據的安全方法:

jq '.mazda |= $ARGS.positional' file.json --args car{00..11}"$domain_name"

這將在命令行mazda之後插入帶有從列表中獲取的值的鍵。--args--args值列表應位於命令行的最後。這些值將根據jq需要進行 JSON 編碼。這通常比嘗試從可能來自外部源的數據自己創建正確的 JSON 更好(例如,如果您要插入的數據包含製表符或換行符或雙引號,jq則將這些正確地編碼為 JSON 字元串--args)。

該列表是使用大括號展開生成的。假設您使用的是bash版本 4 或更高版本,則生成的數字{00..11}將正確填零。

請注意,domain_name不需要是環境(導出)變數。

引用自:https://unix.stackexchange.com/questions/555123