首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将Bash逗号分隔的字符串值变量传递给jq arg过滤器

基础概念

jq 是一个轻量级且灵活的命令行 JSON 处理器。它允许你解析、过滤、转换和输出 JSON 数据。arg 过滤器是 jq 中的一个功能,用于将外部变量传递给 jq 表达式并在其中使用。

相关优势

  1. 灵活性jq 提供了丰富的操作符和函数来处理 JSON 数据。
  2. 易用性:通过命令行即可完成复杂的 JSON 数据处理任务。
  3. 集成性:可以轻松与其他命令行工具结合使用。

类型与应用场景

  • 类型arg 过滤器主要用于将字符串类型的变量传递给 jq
  • 应用场景:当你需要在 jq 表达式中使用外部变量时,例如处理动态生成的 JSON 数据或根据环境变量调整输出。

示例代码

假设你有一个 Bash 变量 STR_VALUES,其值为逗号分隔的字符串,你想将其传递给 jq 并在 JSON 中使用这些值。

代码语言:txt
复制
STR_VALUES="apple,banana,cherry"
echo '{"fruits": ["orange"]}' | jq --argjson arr "$(echo $STR_VALUES | tr ',' ' ')" '.fruits += $arr'

解释与问题解决

为什么会这样?

当你尝试直接传递逗号分隔的字符串给 jqarg 过滤器时,jq 会将其视为一个整体的字符串,而不是多个独立的元素。因此,你需要先将这个字符串转换为 jq 可以理解的格式,通常是 JSON 数组。

原因是什么?

jqarg 过滤器默认接收的是单个字符串值。逗号分隔的字符串在 jq 中不会自动解析为数组。

如何解决这些问题?

  1. 转换字符串为 JSON 数组: 使用 tr 命令将逗号替换为空格,然后通过 --argjson 选项传递给 jq,这样 jq 就会将其解析为一个 JSON 数组。
  2. 转换字符串为 JSON 数组: 使用 tr 命令将逗号替换为空格,然后通过 --argjson 选项传递给 jq,这样 jq 就会将其解析为一个 JSON 数组。
  3. 直接生成 JSON 数组: 如果可能,直接在 Bash 中构建 JSON 数组字符串,然后传递给 jq
  4. 直接生成 JSON 数组: 如果可能,直接在 Bash 中构建 JSON 数组字符串,然后传递给 jq

通过这些方法,你可以有效地将逗号分隔的字符串值变量传递给 jq 并在 JSON 处理中使用它们。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JSON神器之jq使用指南指北

jq 的输入被解析为一系列以空格分隔的 JSON 值,一次一个地通过提供的过滤器。过滤器的输出被写入标准输出,同样是一系列以空格分隔的 JSON 数据。 注意:注意 shell 的引用规则很重要。...--arg name value: 此选项将值作为预定义变量传递给 jq 程序。如果您使用 运行 jq --arg foo bar,则foo在程序中可用并具有值"bar"。...--argjson name JSON-text: 此选项将 JSON 编码的值作为预定义变量传递给 jq 程序。...逗号:, 如果两个过滤器用逗号分隔,那么相同的输入将被馈送到两个过滤器,两个过滤器的输出值流将按顺序连接:首先,左表达式产生的所有输出,然后是所有输出由权利产生。...jq 的数组语法:表达式[1,2,3]没有使用逗号分隔数组的内置语法,而是将[]操作符(收集结果)应用于表达式1,2,3(产生三种不同的结果)。

28.7K30

Bash 中的 $* 和 $@ 有什么区别

答: 在 Bash 中,* 和 @ 都用于引用传递给脚本或函数的所有参数。 当没有双引号包围时,$* 和 $@ 的行为是相同的。...arg 1 arg 2 arg 3 在 bash 中,"$@" 是要遍历的“默认”列表: $ for word; do echo "$word"; done arg 1 arg 2 arg 3...那么估计有同学要问了,有没有在需要 " 有的,在需要以特定方式合并参数时," 假设你想要创建一个字符串,其中包含传递给脚本的所有参数,且参数之间由逗号(而不是默认的 IFS 分隔符)连接。.../bin/bash # 错误的方式:"$@" 不会按预期合并参数 result="$@" echo "Using \"\$@\": ${result}" # 正确的方式:更新 IFS 后,"$*"...可以正确地按逗号分隔参数 IFS=, result="$*" echo "Using \"\$*\": ${result}" 测试截图如下: 参考文档: stackoverflow question

36010
  • Vue0.11版本源码阅读系列四:详解指令值解析函数

    总结一下,就是如果是以逗号分隔的冒号表达式,则解析为: [ { arg: 【冒号前的字符】, expression: 【冒号后的字符】, raw:...,下一步来支持逗号分隔的冒号表达式。...,如果属性值里存在逗号,那该属性值一定是被引号包围的,所以在单引号或双引号里的都要忽略,所以让我们新增两个变量来记录是否是在引号里: var inDouble = false // ++ var inSingle...最后来看过滤器,过滤器使用管道符|,所以遍历到这个字符时推入过滤器,过滤器支持多个,第一个字符串代表表达式,后续|分隔的各代表一个过滤器,当出现第一个|时只能获取到该过滤器所被应用的值,也就是expression...,参数和过滤器名之间用空格分隔,所以写一个正则来匹配一下:/[^\s'"]+|'[^']+'|"[^"]+"/g,参数除了是变量也可以是字符串,所以后面两个对引号的匹配是为了保证最后匹配的结果也是带引号的

    48910

    Shell常用命令使用说明

    -o 将排序后的结果存入指定的文件。 -r 以相反的顺序来排序。 -t分隔字符> 指定排序时所用的栏位分隔字符。...-F 或 –fixed-regexp : 将样式视为固定字符串的列表。 -G 或 –basic-regexp : 将样式视为普通的表示法来使用。...将所有输入读取(吸取)到数组中;应用过滤器; -r 输出原始字符串,而不是JSON文本; -R 读取原始字符串,而不是JSON文本; -C...a v 将变量$a设置为value; –argjson a v 将变量$a设置为JSON value; –slurpfile a f 将变量$a设置为从读取的JSON文本数组;...–rawfile a f 将变量$a设置为包含内容的字符串; –args 其余参数是字符串参数,而不是文件; –jsonargs 其余的参数是JSON参数,而不是文件

    4.7K20

    Shell脚本学习1

    :是Shell的一个内部指令,用于在屏幕上打印出指定的字符串 echo arg #输出arg变量 echo -e arg #执行arg里的转义字符。...说明: printf 命令不用加括号 format-string 可以没有引号,但最好加上,单引号双引号均可 参数比格式控制符(%)多时,格式控制符可以重用,可以将所有参数都转换 arguments 使用空格分隔...特殊变量 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。...$* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。...若此替换出现在Shell脚本中,那么脚本将停止运行。 ${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

    32020

    java学习与应用(4.6)--过滤器、监听器、JQuery、AJAX、JSON等

    使用注解:过滤器执行的先后使用类名字符串比较(如AFilter,BFilter等)顺序执行。...JSON基本规则:数据由键值对构成,键值用单引号或双引号也可以不使用引号,值类型为数字/字符串/逻辑值/数组/对象/null等。...数据逗号分隔,方括号保存数组(方括号中花括号使用定义数组对象),花括号保存对象定义为json格式。...方法如:writeValue传入File/Writer/OutputStream和obj,将obj转json并填充到指定的位置。writeValueAsString传入对象输出json字符串。...在函数的成员变量前使用,对值进行处理。List集合转换后为数组的json,Map集合转换后为json,和对象一致。

    5.4K10

    Django之templatetags自定义标签和过滤器的使用

    这是过滤器的先天限制。     变量的值:不一定是字符串形式。     参数的值:可以有一个初始值,或者完全不要这个参数。...下面是一个定义过滤器的例子: def cut(value, arg):     """将value中的所有arg部分切除掉"""     return value.replace(arg, '')...然后在模板中,可以将任意数量的由空格分隔的参数传递给模板标签。像在Python中一样,关键字参数的值使用等号("=")赋予,并且必须在位置参数之后提供。...然后在模板中,可以将任意数量的由空格分隔的参数传递给模板标签。像在Python中一样,关键字参数的值的设置使用等号("=") ,并且必须在位置参数之后提供。...比如说,当你想要将上下文context中的home_link和home_title这两个变量传递给模版。

    1.7K20

    工具| jq 玩转JSON数据的利器

    其可以接受标准输入,命令管道或者文件中的 JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中,从而帮助我们很好的解析json数据。...需要说明的是 jq 只能接受标准的 JSON 字符串作为输入内容。也就是说输入内容必须严格遵循 JSON 格式的标准。所有的属性名必须是以双引号包括的字符串。...对象的最后一个属性的末尾或者数组的最后一个元素的末尾不能有逗号。否则 jq 会抛出无法解析 JSON 的错误。...$ jq . test.json parse error: Invalid numeric literal at line 2, column 8 2.3 基础表达式 jq 提供基本过滤器用来访问 JSON...其中逗号表示对同一个输入应用多个表达式。管道符表示将前一个表达式的输出用作后一个表达式的输入。当前一个表达式产生的结果是迭代器时,会将迭代器中的每一个值用作后一个表达式的输入从而形成新的表达式。

    3.8K20

    写好Shell脚本那些不得不知道的细节

    将标准输出和错误输出改向out文件 $ cmd >out 2>>out $ cmd >out 2>>&1 5. shell的变量 hell实际上是基于字符串的程序设计语言,但也有变量。...如: "$#" 记录传递给shell的自变量个数 "$*" 传递给脚本或函数的所有参数 $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n"...若 $file 没设定,则回传 txt ,并将 $file 赋值为txt,空值及非空值不作处理 ${file:=txt} 若 $file 没设定或空值,则回传 txt ,将 $file...arg2 ... argn do command done 读取循环条件时,默认情况下,shell会以空格、制表符、换行符作为分隔符,但遇到以上情况时,需要使用IFS来自定义shell的分隔符...变量的引用 在我们定义一个变量之后,引用一个变量,最好使用 {var}而不是 var,特别是在后面需要拼接字符串的时候,比如 echo ${time}isout 如果不使用 {}将变量包裹起来,time

    1.9K10

    Python全网最全基础课程笔记(十二)——函数,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!

    函数名 是你自定义的,用于调用这个函数的名字。根据PEP 8,函数名应该使用小写字母和下划线(snake_case)的形式。 参数列表 是函数接收输入的地方,它是一个由逗号分隔的变量名列表。...实参(Actual Parameters) 实参是调用函数时传递给函数的实际值,这些值可以是常量、变量、表达式或另一个函数的返回值。实参的值会被传递给相应的形参,以便在函数内部使用。...形参:函数定义时括号内的变量名,用于接收外部传入的数据。 实参:调用函数时传递给函数的实际值。...调用 调用函数时,你需要按照形参定义的顺序提供实参: function_name(arg1, arg2, ..., argN) 其中,arg1, arg2, …, argN 是传递给函数的实参,它们会被按照顺序分配给相应的形参...这个默认值可以是任何静态值,包括数字、字符串、列表、元组、字典、集合、None等,但不能是变量(因为变量在函数定义时可能尚未定义或已被赋予不同的值)。

    12610

    exec族

    (arg1, arg2, argv[], envp[])传递给子程序,出错返回-1....看一下后缀: 后缀 功能 l 希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志 v 希望接收到一个以NULL结尾的字符串数组的指针 p 是一个以NULL结尾的字符串数组指针,函数可以DOS的...,适合包含v的exec函数参数 char *arg[] = {"ls", "-a", NULL}; /** * 创建子进程并调用函数execl * execl 中希望接收以逗号分隔的参数列表...,列表以NULL指针作为结束标志 *p是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件 */ if( fork() == 0 ) { // in...*p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件 */ if( fork() == 0 ) { printf("4----------

    1.1K10

    Linux xargs 命令

    xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。...-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。-x exit的意思,主要是配合-s使用。。...dXname name name name结合 -n 选项使用:# echo "nameXnameXnameXname" | xargs -dX -n2name namename name读取 stdin,将格式化后的参数传递给命令假设一个命令为.../bin/bash#sk.sh命令内容,打印出所有参数。...echo $*arg.txt文件内容:# cat arg.txtaaabbbcccxargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I

    1.6K10

    ANT标签详解

    2.ervironment 类型 由Ant构建文件调用的外部命令或程序,元素制定了哪些环境变量要传递给正在执行的系统命令,元素可以接受以下属性: file表示环境变量值得文件名。...defaultexcludes 用来确定是否使用默认的排除模式,默认为true。 excludes 是用逗号分隔的需要派出的文件模式列表。...主要属性如下: begintoken 表示嵌套过滤器所搜索的记号,这是标识其开始的字符串。 endtoken表示嵌套过滤器所搜索的记号这是标识其结束的字符串。 id是过滤器的唯一标志符。...生成文件中的属性是作为字符串来指定的,因此我们的 setter 方法的参数可以是一个字符串。在这样的情况下,Ant 将在展开值所引用的任何属性之后,使用该属性的字符串值来调用我们的方法。...可以通过将方法参数声明为 java.io.File 类型来容易地做到这点。 Ant 将接受属性的字符串值,并把它解释为一个文件,然后传递给我们的方法。

    1K10

    记一次远程命令执行漏洞的挖掘过程

    从下面代码我们可以看到,函数的功能是判断FILE_PATH变量的值是否存在,而这个变量的值目前是可控的。 ? 最初想通过添加双引号闭合if条件判断参数注入命令,没有成功。...结果显示不完整,只能看到返回的第一行的结果,没关系,可以简单优化一下: payload:"`ifconfig |xargs`" 拓展知识:xargs可以将stdin中以空格或换行符进行分隔的数据,形成以空格分隔的参数...(arguments),传递给其他命令。...因为以空格作为分隔符,所以有一些文件名或者其他意义的名词内含有空格的时候,xargs可能会误判。简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一。...小结 漏洞是由于程序调用bash脚本传参时没有做过滤,通过$(cmd)这样的方式来执行命令并将结果存入变量中,在脚本判断文件不存在时会返回文件名,造成了回显。

    1.7K10

    shell解析json字符串

    之前了解Lua中如何解析Json字符串,现在了解一下shell中如何解析Json字符串, 常用到的方法使用正则表达式配合grep/awk/sed来进行解析, 这样解析起来比较麻烦, 前辈们考虑的很全面,...jq程序是一个"过滤器", 它有一个输入, 并产生一个输出. 有很多内置的过滤器由于提取对象中的特定字符串,或将数字转换为一个字符串或其他标准任务 Linux 安装 官网说的非常详细 ?.../configure --host mipsel-linux make jq 拷贝到mipsel平台测试成功(前提是必须安装mipsel-linux-gcc编译器) 查看系统环境变量, echo $[PATH...Json Parse 通过jq . 能够将json字符串很好的排列 ? 如何获取"employees"数组中第一个name字段的数据 #!.../bin/bash //-r 代表过滤掉字符串的双引号 var=`cat test.txt | jq -r '.employess[0].name'` echo "$var" 参考 官网 参考1 参考

    16.5K20

    【愚公系列】2021年12月 Python教学课程 12-Python函数

    调用的同时要根据函数的定义体,提供相应个数和类型的参数,每个参数之间用逗号分隔。...a 一个函数调用:return func() 多个返回值,以逗号分隔:return a, 1+2, “hello” 简而言之,函数可以 return 几乎任意 Python 对象。...如何接收函数的返回值? 我们在调用函数的时候,可以将函数的返回值保存在变量中。...def func(): pass return "something" result = func() 而对于同时返回多个值的函数,需要相应个数的变量来接收,变量之间以逗号分隔: def...实际情况是,不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。而字典,则会将所有的 key 逐一传递进去。

    52720

    eval builtin command

    使用空格分隔每个参数,如果参数中含有变量,则替换为变量值,然后再将构造的命令交由 Shell 解释执行。它通常用于动态生成和执行命令,或者将字符串解释为可执行的 Shell 代码。...2.命令格式 eval [ARG...] eval 的返回值是其后面命令的退出状态。如果没有参数或只有空参数,eval 返回 0。 3.选项说明 None。 4.常用示例 (1)打印变量。...Shell 使用特殊字符 # 表示传递给脚本或函数的参数个数,使用n获取参数,n 为数字,1 表示第一个参数,2 表示第二个参数,所以 cat test.sh #!.../usr/bin/bash echo \$$# eval echo \$$# ..../test.sh firstarg lastarg $2 lastarg ---- 参考文献 bash(1) - Linux manual page - man7.org ``和$()的区别及eval

    23320
    领券