shell - 在 shell 中使用 jq 库时观察到意外的令牌错误
问题描述
我使用了以下命令,它会在属性值中获得一些子字符串。
skipped=$(echo "$value" | jq -f '.[].output | scan("totalSkipped+: [[:digit:]]+")' | sed 's/"//g' )
我通过 Jenkins 作业在 shell 中运行了这个脚本。并观察到以下错误消息:
/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 版本。
有人可以帮我解决这个问题吗?
解决方案
skipped=$(jq -r '.[].output | scan("totalSkipped: [[:digit:]]+")' <<<"$value")
管道是jq语法,所以它需要在单引号内,这样 shell 就不会尝试找到名为scan
.
这里没有理由sed
- 使用-r
jq 的参数使其发出原始字符串作为输出,因此它们没有语法引号。
推荐阅读
- python - 如何在 Pandas 中将字符串列解析为日期时间格式?
- python - 编写程序来计算和打印文本文件中数字的平均值,其中包括使用两个高阶函数的文本和数字
- flutter - 如何在flutter bloc中使用数据模型
- postgresql - 按升序对数据进行排序 POSTGRES SQL
- javascript - 角度类型“{}”上不存在属性“长度”
- ios - 在 TableView 的 CellView 中保持循环关闭
- windows - 我可以将控制台输出重定向到仅保留最后一行的文件吗?
- apache-spark - 将 ElasticSearch 中的数据读入 Spark 数据集
- node.js - TypeError: Cannot set property 'sorting' of undefined..这是我尝试在数据库中对我的 id 进行排序时遇到的错误
- javascript - 如何在同一函数内从 AJAX 调用接收数据,