( Конкретный ответ Bash )Bash не имеет концепции исключений. Однако с набором -o errexit (или эквивалентным :набором -e )на самом внешнем уровне неудачная команда приведет к выходу подоболочки с не -нулевым статусом выхода. Если это набор вложенных подоболочек без условий выполнения этих подоболочек, он эффективно «свернет» весь сценарий и завершит работу.
Это может быть сложно при попытке включить фрагменты различного кода bash в более крупный сценарий. Один фрагмент bash может прекрасно работать сам по себе, но при выполнении с errexit (или без errexit )вести себя неожиданным образом.
[192.168.13.16 (f0f5e19e) ~ 22:58:22]# bash -o errexit /tmp/foo something went wrong [192.168.13.16 (f0f5e19e) ~ 22:58:31]# bash /tmp/foo something went wrong But we got here anyways [192.168.13.16 (f0f5e19e) ~ 22:58:37]# cat /tmp/foo #!/bin/bash stop () { echo "${1}" exit 1 } if false; then echo "foo" else ( stop "something went wrong" ) echo "But we got here anyways" fi [192.168.13.16 (f0f5e19e) ~ 22:58:40]#
Вы просто используете функцию unique_by()
в jq
, которая ожидает массив объектов и принимает имя поля в качестве входных данных для удаления дубликатов на
jq -n '[ inputs[] ] | unique_by(."value 1")'
Чтобы добавить поверх моего другого ответа для уникального выбора на основе одного поля и удаления объектов по другому полю, вы можете сделать это ниже. Приведенный ниже код группирует объекты, исключая дубликаты на основе "value 1"
и исключая объекты, содержащие "value 6"
jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )] '