【发布时间】:2022-01-07 11:45:34
【问题描述】:
我无法弄清楚我的以下 bash 脚本有什么问题:
#!/bin/bash
function jsonValue() {
key=$1
num=$2
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$key'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}
json='{"_id": "dummy_id","title": "dummy_title"}'
id=$(echo $json | jsonValue _id)
title=$(echo $json | jsonValue title)
echo ${id}/${title}
结果是:
dummy_id title/ dummy_title
函数结果不包含空格。 你知道这个函数有什么问题吗?
【问题讨论】:
-
您没有在 FS 中包含空格,因此该字段为
' "dummy_title"'(带有前导空格)。 -
似乎是
jq的工作。 -
您应该将该脚本复制/粘贴到shellcheck.net 并修复它会告诉您的问题。另请参阅how-do-i-use-shell-variables-in-an-awk-script。
-
拥有
json='{"_id": "1", "title": "this, is; a \"title\" {1}"}'后你会怎么做?