代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

Kornshell(ksh)Segfault公司

  •  2
  • C. Ross trotttrotttrott  · 技术社区  · 15 年前

    我发现以下脚本会导致AIX上的kornshell(ksh)中出现分段错误和核心。有人能解释我为什么会得到以下结果吗?

  • 赛格断层
    doOutput(){
      Echo "Something"
    }
    
    doOutput() >&1
    

    doOutput(){
      Echo "Something"
    }
    
    echo `doOutput()`
    

  • 无输出
    doOutput(){
      Echo "Something"
    }
    
    doOutput()
    

  • 对的
    doOutput(){
      Echo "Something"
    }
    
    doOutput 
    

    doOutput(){
      Echo "Something"
    }
    
    doOutput >&1
    

  • 2 回复  |  直到 11 年前
        1
  •  2
  •   Dennis Williamson    15 年前

    对外壳程序(如ksh)中的函数的调用不使用括号。它们仅在函数定义期间使用。

    对的:

    doOutput(){
      Echo "Something"
    }
    
    doOutput
    

    如果使用参数调用函数,则使用空格(无括号)将其分隔:

    doOutput(){
      Echo "$1 and then $2"
    }
    
    doOutput go stop
    

    不正确的:

    doOutput(){
      Echo "Something"
    }
    
    doOutput()
    

    另外,为什么要将stdout重定向到stdout( >&1 )?

        2
  •  0
  •   bmargulies    15 年前

    您在ksh中发现了一个bug,只有它的作者或有权访问源的人才能向您解释它。真正的ksh以前不是开源的,但可能已经改变了。