簡體   English   中英

解析錯誤:第 1 行第 2 列的數字文字無效(bash)

[英]parse error: Invalid numeric literal at line 1, column 2 (bash)

我正在 bash 中使用 json,但出現此解析錯誤:

parse error: Invalid numeric literal at line 1, column 2

這段代碼有什么問題?

jsonStr=$(cat << EOF
'{"key1": "value1", "key2": "value2", "key3": "value3"}'
EOF
)
jsonStr=$(jq 'del(.key3)' <<<"$jsonStr")
STRING="hello"
jsonStr=$(jq '. + {'"$STRING"': "value4"}' <<<"$jsonStr")
echo $jsonStr

$(cat << EOF ...)構造將單引號作為數據的一部分傳遞,即:

$ jsonStr=$(cat << EOF
'{"key1": "value1", "key2": "value2", "key3": "value3"}' 
EOF
)
$ echo "${jsonStr}"
'{"key1": "value1", "key2": "value2", "key3": "value3"}'

注意前導/尾隨單引號。

要克服解析錯誤,您需要去掉單引號,例如:

$ jsonStr=$(cat << EOF
{"key1": "value1", "key2": "value2", "key3": "value3"}
EOF
)

# or

$ jsonStr='{"key1": "value1", "key2": "value2", "key3": "value3"}'

以上兩個都給了我們:

$ echo "${jsonStr}"
{"key1": "value1", "key2": "value2", "key3": "value3"}

現在jq/del按預期工作:

$ jq 'del(.key3)' <<< "${jsonStr}"
{
  "key1": "value1",
  "key2": "value2"
}

然后+操作也有效:

$ STRING="hello"
$ jq 'del(.key3)' <<< "${jsonStr}"  | jq '. + {'"$STRING"': "value4"}'
{
  "key1": "value1",
  "key2": "value2",
  "hello": "value4"
}

把這一切放在一起:

jsonStr='{"key1": "value1", "key2": "value2", "key3": "value3"}'
jsonStr=$(jq 'del(.key3)' <<< "${jsonStr}")
STRING="hello"
jsonStr=$(jq '. + {'"${STRING}"': "value4"}' <<< "${jsonStr}")
echo "${jsonStr}"

產生:

{
  "key1": "value1",
  "key2": "value2",
  "hello": "value4"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM