При использовании библиотеки jq в оболочке произошла непредвиденная ошибка токена - PullRequest
0 голосов
/ 18 октября 2019

Я использовал приведенную ниже команду, и она получит некоторую подстроку в значении атрибута.

  skipped=$(echo "$value" | jq -f '.[].output | scan("totalSkipped+: [[:digit:]]+")' | sed 's/"//g' )

Я запустил этот скрипт в оболочке через задание Jenkins. и наблюдаемое ниже сообщение об ошибке:

/tmp/jenkins7615126817764256878.sh: command substitution: line 30: syntax error near unexpected token `"totalSkipped+: [[:digit:]]+"'
/tmp/jenkins7615126817764256878.sh: command substitution: line 30: `echo "$value" | jq .[].output | scan("totalSkipped+: [[:digit:]]+") | sed 's/"//g' )'

У меня есть весь файл json, который хранится в переменной $ value, и echo "$ value" вернул содержимое файла json, но не уверен, почему он не работает в jenkins.

Я использовал ту же команду в онлайн-инструменте jq, но она работает, как и ожидалось.

https://jqplay.org/s/7lBj_kDoB3

Я использую версию jq-1.6.

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

1 голос
/ 18 октября 2019
skipped=$(jq -r '.[].output | scan("totalSkipped: [[:digit:]]+")' <<<"$value")

Конвейер имеет синтаксис jq , поэтому он должен быть заключен в одинарные кавычки, чтобы оболочка не пыталась найти отдельную команду оболочки с именем scan.

Нет никакой причины для sed здесь - использование аргумента -r для jq заставляет его выдавать необработанные строки в качестве вывода, поэтому они не имеют синтаксических кавычек.

...