开关/外壳在awk中不起作用

Gar*_*ary 11 linux awk

我在redhat linux中写了一个简单的awk,但发现switch/case对我不起作用.我在网上搜索,但没有找到解决方案.以下是我的代码:

 BEGIN {
   foo = 1;
     switch (foo) {
         case 3:
         print "x";
         break;
         case 2:
         print "y" ;
         break;
         case 1:
         print "z" ;
         break;
         default:
         print "default" ;
      }
 }
Run Code Online (Sandbox Code Playgroud)

我正在运行的awk是GNU Awk 3.1.5.我得到以下错误:

awk -f test.awk

awk: test.awk:3:      switch (foo) {
awk: test.awk:3:                   ^ syntax error
awk: test.awk:5:          case 3:
awk: test.awk:5:                ^ syntax error
awk: test.awk:8:          case 2:
awk: test.awk:8:                ^ syntax error
awk: test.awk:11:          case 1:
awk: test.awk:11:                ^ syntax error
awk: test.awk:14:          default:
awk: test.awk:14:                 ^ syntax error
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮帮我吗?谢谢!

Jon*_*ler 12

GAWK手册说:

6.4.5交换机声明

注意:本小节描述了在gawk 3.1.3中添加的实验性功能.默认情况下不启用它.要启用它,请使用'--enable-switch'选项配置何时配置和构建gawk.有关更多信息,请参见第B.2.2节[其他配置选项],第269页.

switch语句允许基于大小写匹配来评估表达式和语句的执行.将按照定义的顺序检查案例语句的匹配项.如果找不到合适的案例,则执行默认部分(如果提供).

gawk你使用的是哪个版本?它是用--enable-switch选项编译的吗?

如果您无法判断是否gawk已编译--enable-switch并且您遇到语法错误,则可以合理地推断它不是.我使用的是使用gawk 3.1.8默认配置进行编译,并且几乎可以获得您在脚本中看到的错误.鉴于此,您的版本不太可能使用必要的配置选项进行编译.gawk如果您愿意,使用该选项重新编译并不困难.

  • 如果在尝试使用switch语句时遇到语法错误,可能是*不用*--enable-switch`编译:) (6认同)
  • 我的系统上有 gawk 4.0.1。问题中的代码运行时没有诊断消息,并正确打印“z”。当前的 [gawk 手册](http://www.gnu.org/software/gawk/manual/html_node/Switch-Statement.html) 并没有说该功能是实验性的;它只是说“这个 switch 语句是 gawk 扩展。如果 gawk 处于兼容模式(请参阅选项),则它不可用。” (2认同)