我有一个函数可以检查 json 文件内的对象中保存的重复值。当发现重复项时,该函数返回如下内容:
{
"Basket1": [
Apple,
Orange
],
"Basket2": [
Apple,
Orange
]
}
如果没有找到重复项,则返回空列表:
{}
目前我正在使用-s
在 bash 中这样检查输出中是否找到重复项:
<"$baskets" jq -L $HOME 'check_dups' > "$dups"
if [[ ! -s "$dups" ]];
then
echo -e "${RED}[Error]${NC} Duplicates found! Please review duplicates below" >&2
echo "$(cat "$dups" | jq '.')"
else
echo -e "${GREEN}[SUCCESS]${NC} No duplicates found" >&2
fi
然而,如果没有找到重复项,返回的空对象将导致 bash 中的 -s 文件检查成功。使用 jq 或 bash 检查该函数的输出是否为空对象的最佳方法是什么?
您可以使用error()
如果您的输入与以下内容相同,则会导致失败{}
,否则继续。
jq '
if . == {} then error("empty document found") else . end
| ...rest of your processing here...
'
举个简单的例子:
<<<"{}" jq 'if . == {} then error("empty document found") else . end | {"output": (.)}'
...即使没有,也会发出非零退出状态jq -e
.
(解决一个问题@Thomas带大,error()
具有与输入解析错误不同的退出状态;前者为4,后者为5,编译错误为3;因此,如果需要区分它们,这是完全可能的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)