awk中if-else if-else分支使用多操作语句出现语法错误如何解决?
问题原因
这是语法编写错误导致的,awk完全支持在条件分支中使用大括号包裹多条执行语句,并非固有特性限制。
错误出现在else if分支的大括号末尾多写了额外的分号:
else if (a == 20) {print "a = 20"; print "b = 20"}; \ # 错误点在这里 ↑ 大括号结束后不应该加这个分号
awk语法中,大括号}本身就具备代码块结束的标识作用,你额外添加的分号会被awk识别为整个if-else if条件链的终止标记,后续的else就找不到与之匹配的前置if判断,因此抛出语法错误。
修正方案
方法1:直接删除大括号外的分号
awk 'BEGIN {a=30; \ if (a==10) print "a = 10"; \ else if (a == 20) {print "a = 20"; print "b = 20"} \ else print "a = 30"}'
运行后输出结果符合预期:
a = 30
方法2:把分号移到大括号内部
如果习惯用分号做语句结束标记,可以把分号放在大括号内最后一条语句的末尾,同样符合语法规范:
else if (a == 20) {print "a = 20"; print "b = 20";} \
内容的提问来源于stack exchange,提问作者Siyuan Feng
相关产品推荐
相关产品推荐

