如何在Bash脚本中将变量传入jq的select查询语句?
解决jq调用Bash变量的语法问题
推荐方法:使用jq的--arg参数传递变量
这是最安全可靠的方式,能避免特殊字符转义问题,还能防止注入风险:
jq -r --arg sp_val "$spName" '.[] | select(.principalName==$sp_val) | .principalName' sp.txt
--arg sp_val "$spName":把Bash变量$spName的值传递给jq,在jq内部用$sp_val引用这个值(变量名可自定义,无需和Bash变量名一致)- 保持jq表达式用单引号包裹,避免Bash干扰其内部语法
备选方法:通过Bash变量展开(需处理引号转义)
如果要直接在jq表达式中展开Bash变量,需将整个jq表达式用双引号包裹,同时转义jq内部的双引号:
jq -r ".[] | select(.principalName==\"$spName\") | .principalName" sp.txt
注意:这种方法仅适用于$spName为简单字符串的场景,若变量包含特殊字符(如双引号、反斜杠)会出错。
内容的提问来源于stack exchange,提问作者ashabc
相关产品推荐
相关产品推荐

