bash函数调用含awk命令时,如何转义带<>的特殊字符参数?
问题解决:bash函数传递含特殊字符参数报错及修正
错误原因
bash中<、>属于重定向特殊字符,直接作为参数输入时,shell会将其解析为输入/输出重定向操作,而非普通字符串参数,因此触发语法错误。
解决步骤
1. 调用函数时给特殊字符参数加引号
将包含<、>的参数用单引号或双引号包裹,让shell将其识别为完整字符串:
SearchPatInBlk '<spirit:addressBlock>' '</spirit:addressBlock>' '<spirit:name>' ../../ab21/ab21_cmn700_new10_clst/build/ab21_cmn700/logical/cmn700/ipxact/cmn700_ab21.xml
2. 优化函数本身(避免正则解析问题)
原函数直接将shell参数嵌入awk正则,容易因参数中的特殊字符(如:)触发awk正则解析异常,建议用-v选项传递变量,同时给文件名参数加引号防止空格/特殊字符干扰:
function SearchPatInBlk { awk -v start="$1" -v end="$2" -v target="$3" ' $0 ~ start { inblk = 1 } inblk == 1 && $0 ~ end { inblk = 0 } inblk == 1 && $0 ~ target { print $0 } ' "$4" }
验证效果
用你提供的示例XML测试,调用修改后的函数会正确输出:
<spirit:name>cmn700_registers</spirit:name>
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

