2010-02-05 2 views
2

Я обнаружил, что следующий сценарий вызывает ошибку сегментации и ядро ​​в KornShell (ksh) в AIX. Может ли кто-нибудь объяснить, почему я получаю следующие результаты?KornShell (ksh) SegFault

  • Seg Fault

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

    ИЛИ

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

  • Нет Выход

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

  • Правильное

    doOutput(){ 
        Echo "Something" 
    } 
    
    doOutput 
    

    ИЛИ

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

  • ответ

    2

    Вызов функций в оболочках, таких как ksh, не использует круглые скобки. Они используются только во время определения функции.

    Правильно:

    doOutput(){ 
        Echo "Something" 
    } 
    
    doOutput 
    

    При вызове функции с параметрами, вы разделите их пространства (не круглые скобки):

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

    Неправильные:

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

    Плюс, w Вы перенаправляете stdout на stdout (>&1)?

    +0

    Потому что я не получал выход, и я не был уверен, почему. Спасибо, глупая синтаксическая ошибка. –

    0

    Вы обнаружили ошибку в ksh, и только ее авторы или кто-то, у кого есть доступ к источнику, могут объяснить вам это. Реальный ksh не был открытым исходным кодом, но, возможно, это изменилось.