我有一个函数可以检查 json 文件内的对象中保存的重复值。当发现重复项时,该函数返回如下内容:
{
"Basket1": [
Apple,
Orange
],
"Basket2": [
Apple,
Orange
]
}
Run Code Online (Sandbox Code Playgroud)
如果没有找到重复项,则返回空列表:
{}
Run Code Online (Sandbox Code Playgroud)
目前我-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
Run Code Online (Sandbox Code Playgroud)
但是,如果未找到重复项,则返回空对象将导致 bash 中的 -s 文件检查成功。使用 jq 或 bash 检查该函数的输出是否为空对象的最佳方法是什么?
error()如果您的输入与 相同,则可以使用导致失败{},否则继续。
jq '
if . == {} then error("empty document found") else . end
| ...rest of your processing here...
'
Run Code Online (Sandbox Code Playgroud)
举个简单的例子:
<<<"{}" jq 'if . == {} then error("empty document found") else . end | {"output": (.)}'
Run Code Online (Sandbox Code Playgroud)
...即使没有 . 也会发出非零退出状态jq -e。
(解决@Thomas提出的问题,error()退出状态与输入解析错误不同;前者是 4,后者是 5,而编译错误是 3;所以如果需要区分它们,这是完全可能的)。