2010-12-03 3 views
1

인트로 스크립트 할당을 위해 노력 중이며 스크립트 내에서 함수를 호출하는 데 문제가 있습니다. 나는 과제의 두 번째 부분에 있으며, 나는 내가 가지고있는 것이 잘하면 (잘하면) 일할 수 있는지를 시험하기 위해 시험 중이다. 나는 몇몇 전화 번호부를 모으고, 그렇습니다 또는 아니오 질문을 질문한다. 내가 'y'를 얻었을 때, 내가 부르는 작은 함수를 썼고, 'n'을 얻었을 때 나는 단순한 메아리라는 또 다른 함수를 가지고있다. 이슈가 뭐야?bash 스크립트 내에서 함수 호출시 문제가 발생했습니다.

part_two(){ 
    answer="" 
    for value in "[email protected]";do 
     echo "$value" 
     while [ "$answer" != "y" -a "$answer" != "n" ] 
     do 
     echo -n "Would you like to save the results to a file? (y/n): " 
     read answer 
     done 
     if [ "$answer" = "n" ] 
     then 
      part_six 
     elif [ "$answer" = "y" ] 
     then 
      part_five 
     fi 
    done 
} 

part_two [email protected] 

part_five(){ 
    echo -n "working yes"; 
} 

part_six(){ 
    echo -n "working no"; 
} 

언제나처럼 큰 도움이 될 것입니다.

+1

귀하가 겪고있는 원치 않는 행동을 말할 때까지는 문제를 말할 수 없습니다. – SiegeX

답변

9

C와 매우 유사하게 사용 함수를 정의해야합니다. 코드 스 니펫에서는 두 가지 함수를 선언하기 전에 part_two (part_five 및 part_six를 호출)를 호출합니다.

스크립트의 시작 부분에 정의를 옮겨 보았습니까?

편집 :

대부분의 경우, 배쉬이 처리하는 가장 좋은 방법은 단순히 실제 명령을 실행하기 전에 스크립트의 시작에 모든 기능을 정의하는 것입니다. 정의의 순서는 중요하지 않습니다. 쉘은 함수를 사용할 때만 함수를 찾습니다. 따라서 일반적으로 의존성 문제 등을 생각할 필요가 없습니다.

편집 2 :이

방금 ​​스크립트의 시작 부분에 함수를 정의 할 수 없습니다가지 경우입니다. 동적 선택하거나 기능 e..g : 선언하면 각 함수 호출이 함수 후 발생 있는지 확인해야합니다 이러한 경우

if [[ "$1" = 0 ]]; then 
    function show() { 
     echo Zero 
    } 
else 
    function show() { 
     echo Not-zero 
    } 
fi 

을 수정하는 조건 구조를 사용할 때 일반적인 경우입니다 (및 호출하는 다른 모든 것) 선언됩니다.

편집 3 :

는 배쉬에서 함수 선언은 실제로 구현을 정의하는 function foo() { ... } 블록 - 그리고 예, function 키워드가 엄격하게 필요하지 않습니다. C와 같은 함수 프로토 타입은 존재하지 않습니다. 쉘 스크립트는 일반적으로 실행될 때 구문 분석되기 때문에 어쨌든 의미가 없습니다. Newer Bash 버전은 즉시 스크립트를 읽지 만 주로 구문 오류를 확인하고이 오류와 같은 논리적 오류는 검사하지 않습니다.

공식 용어는 "function 선언"이지만 Bash 정보 페이지조차도 "선언"과 "정의"를 동일하게 사용합니다.

+0

감사합니다. 우리는 수업 시간에 기능을 만졌지 만 순간에 대해서만 정의 할 필요가 있음을 알지 못했습니다. – mrwienerdog

+0

@mrwienerdog : 즉,이 줄을 아래쪽으로 이동하십시오 :'part_two $ @'. –

관련 문제