我有一個 JSON 檔案,我正在嘗試使用腳本更改其中的特定值。
"foo-bar": "baz",
在這個例子中它被設定為 baz,但實際上我不知道這個值是什么。
我想foo-bar從更大的腳本中更改的值。
"foo-bar": "qux",
我試過
$var='qux'
jq --arg passvar ${var} '{"foo-bar":$passvar}' file.json
我在終端中得到正確的輸出
{
"foo-bar": "qux"
}
但是當我使用 vim 檢查實際檔案內容時,我得到
"foo-bar": "baz",
jq不想保存新的file.json?或者這是某種預覽?我錯過了什么?有沒有比jq在 json 檔案中更新/設定值更好的方法?
* 編輯為初始變數添加一個破折號,它現在是 foo-bar 而不僅僅是 foo。
uj5u.com熱心網友回復:
根據檔案:
過濾器的輸出被寫入標準輸出
因此,您需要將輸出重定向到您想要的任何檔案。
jq --arg passvar ${var} '{"foo":$passvar}' file.json > newfile.json
uj5u.com熱心網友回復:
真正的答案在這里 https://stackoverflow.com/a/42718624/1286903
tmp=$(mktemp)
jq --arg p "$passvar" '."foo-bar" = $p' file.json > "$tmp" && mv "$tmp" file.json
您需要使用臨時檔案來執行此操作。另外,當你的變數有破折號時要注意引號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345971.html
標籤:javascript json zsh
上一篇:如果缺少函式引數如何失敗
