我在下面設定了一個這樣的變數-
domain= ("*.abc" "*.xyz" "*.123")
我想在 json 檔案中設定這個變數的值,如下所示 -
"Items": [
"*.abc",
"*.xyz",
"*.123",]
但是,問題是 bash 腳本正在跳過引號 "" 并且只在引號內。除此之外,bash 還試圖將值作為命令。我只想在 Items 陣列中設定值,包括逗號,就是這樣。
我正在使用jq --arg e1 ${domain[@]}
將域變數設定為 e1 環境變數。
并得到以下錯誤 -
jq: error: syntax error, unexpected '*', expecting $end (Windows cmd shell quoting issues?) at <top-level>, line 1: *.xyz.com
uj5u.com熱心網友回復:
--arg
不理解 bash 陣列(某些 shell 沒有任何陣列)。
您可以改用--args
填充$ARGS.positional
剩余引數串列的方法。
domain=("*.abc" "*.xyz" "*.123")
jq '.Items = $ARGS.positional' <<<'{"Items":[]}' --args "${domain[@]}"
請注意,我洗掉了domain=
. 使用空格,bash 會引發語法錯誤。
uj5u.com熱心網友回復:
您可以將 bash 陣列轉換為字串并通過換行符分隔專案,然后使用 匯入字串,然后使用--arg
再次將其拆分為 jq 陣列/
:
jq -n --arg e1 "$(printf '%s\n' "${domain[@]}")" '{Items: ($e1 / "\n")}'
{
"Items": [
"*.abc",
"*.xyz",
"*.123"
]
}
uj5u.com熱心網友回復:
您可以使用--args
將陣列jq
作為引數傳遞,保留串列/陣列結構:
domain=('*.abc' '*.xyz' '*.123')
jq -n --args '.Items = $ARGS.positional' "${domain[@]}"
給出:
{
"Items": [
"*.abc",
"*.xyz",
"*.123"
]
}
請注意,所有參考都是針對 shell 的,而不是針對 JSON 的。jq
在 JSON 中添加引號。添加> myfile
到jq
以將輸出重定向到檔案。
您也可以'*.123'
直接跳過陣列并寫入等,作為jq
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494923.html