2

我发现以下脚本会导致 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
    

  • 4

    2 回答 2

    2

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

    正确的:

    doOutput(){
      Echo "Something"
    }
    
    doOutput
    

    如果调用带参数的函数,则使用空格(无括号)分隔它们:

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

    不正确:

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

    另外,为什么要将标准输出重定向到标准输出(>&1)?

    于 2010-02-05T15:02:58.357 回答
    0

    您在 ksh 中发现了一个错误,只有其作者或有权访问源代码的人才能向您解释。真正的 ksh 过去不是开源的,但也许这已经改变了。

    于 2010-02-05T13:30:45.123 回答