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

    kshなどのシェルの関数の呼び出しでは、括弧は使用されません。これらは関数定義中にのみ使用されます。

    正しい:

    doOutput(){
      Echo "Something"
    }
    
    doOutput
    

    パラメーターを使用して関数を呼び出す場合は、スペース(括弧なし)を使用してパラメーターを区切ります。

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

    正しくない:

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

    さらに、なぜstdoutをstdout(>&1)にリダイレクトするのですか?

    于 2010-02-05T15:02:58.357 に答える
    0

    あなたはkshにバグを見つけました、そしてその作者、またはソースへのアクセス権を持つ誰かだけがあなたにそれを説明することができます。実際のkshは以前はオープンソースではありませんでしたが、おそらくそれは変更されました。

    于 2010-02-05T13:30:45.123 に答える