当前位置: 首页 > 工具软件 > arg > 使用案例 >

linux arg 参数,jq的--arg参数用法

楚博雅
2023-12-01

jq的--arg参数用法

--arg

这是最基本的参数

--arg name value

含义是定义变量$name的值为"value"。

注意这里的value是安装字符串处理的,所以即使是数字值,也是数字串,例如--arg v 123,那么$v=="123"。

举个例子:

$ echo '{"AA":"aa","BB":"bb"}' | jq --arg v XX '.BB=$v'

{

"AA": "aa",

"BB": "XX"

}

举一个数字的例子:

$ echo '{"AA":"aa","BB":"bb"}' | jq --arg v 123 '.CC=$v'

{

"AA": "aa",

"BB": "bb",

"CC": "123"

}

显然数字被按照字符串处理啦,这里没有别的办法只能使用类型转化:

$ echo '{"AA":"aa","BB":"bb"}' | jq --arg v 123 '.CC=($v|tonumber)'

{

"AA": "aa",

"BB": "bb",

"CC": 123

}

参数--arg最常用的场景也就是这里,试想上述例子,如果不用--arg如何替换字段"BB"的值呢:

J='{"AA":"aa","BB":"bb"}'

V="vv"

#echo ${J} | jq '.BB=$V'

echo ${J} | jq '.BB="'$V'"'

echo ${J} | jq --arg v ${V} '.BB=$v'

从词法表达式看使用--arg显得更为简洁。

使用多个参数

J='{"AA":"aa","BB":"bb"}'

V1="vv"

V2="ww"

echo ${J} | jq --arg v1 ${V1} --arg v2 ${V2} '.AA=$v1 | .BB=$v2'

参数--argjson

和--arg相比,差别就是--arg表示一个简单的字符串值,而--argjson表示一个json对象。

J='{"AA":"aa","BB":"bb"}'

A='{"XX":"xx","YY":1234}'

echo ${J} | jq --argjson a ${A} '.CC=$a'

# {

# "AA": "aa",

# "BB": "bb",

# "CC": {

# "XX": "xx",

# "YY": 1234

# }

}

echo ${J} | jq --argjson a ${A} '.CC=$a.YY'

# {

# "AA": "aa",

# "BB": "bb",

# "CC": 1234

# }

参数--slurpfile和--rawfile

表示从文件中读取参数,或者json文本,还是字符串文本;他们分别对应于参数--arg和--argjson。

其实--slurpfile对应于--argfile更直接,但是jq文档建议用--slurpfile,但我连这个单词什么意思都不认识呢:-( 。

 类似资料: