我有一个函数可以检查 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;所以如果需要区分它们,这是完全可能的)。
| 归档时间: | 
 | 
| 查看次数: | 4997 次 | 
| 最近记录: |