我有一个json文件,如下所示:
{
"items": [
{
"id": "some_id_1",
"name": "job_get_re_Log",
"type": "standard",
"workspace": {
"id": "some_id_2",
"name": "Shared",
"description": "",
"type": "custom",
"environment": {
"id": "some_id_3",
"name": "DEV"
}
}
}
]
}
要获取id(some_id_1),我运行以下命令:
name="job_get_re_log"
workspace="Shared"
environment="DEV"
id=$(echo $jsonFile | jq -r ".items[] | select(.name == \"$name\" and .workspace.name == \"$workspace\" and .workspace.environment.name == \"$environment\").id")
echo "$id"
正如您所看到的,name变量是“job_get_re_log”,但json中的名称是“job_get_re_Log”(大写L),这最终会失败,并且不会返回任何内容,因为它正在寻找一个完全匹配的对象。
如何修改select命令,使其在进行比较时不考虑大小写(不区分大小写)?
2条答案
按热度按时间2mbi3lxu1#
使用
test()
函数和if ... then ... else
语句:利用给予
test
的标志"i"
完成不敏感搜索。czq61nw12#
要使用
test/1
检查忽略大小写的相等性,必须锚正则表达式字符串。假设$name没有特殊的正则表达式字符:当然,使用
test/1
的要点是它可以处理ASCII范围之外的印刷大小写,例如:正如@OguzIsmail所指出的,如果您希望使用
test
,即使$name
可能包含regex特殊字符,也可以使用\Q...\E
转义机制,如下所示: