2013-07-23 3 views
1

나는 Dropbox 폴더 (단 하나의 코스 작업을 저장하는 곳)에 cd'ing하기 위해 bash 스크립트를 작성했습니다. 필자는 특정 주 동안 폴더에 직접 입력하거나 부모 디렉토리 또는 모든 참조 자료가있는 디렉토리를 사용하기로 결정했습니다. 또한 재귀를 사용하여 입력을 확인하기로 결정했습니다 (처음에는 do while 루프에 재귀 문을 배치하여 무한 루프를 만들었습니다). 반복 솔루션 내부의 재귀 솔루션

#!/bin.bash 
#changes to ~/Dropbox/UCP120/ 

function recurCall() { 
    echo "Invalid input: $arg1 does not exist." 
    echo "Enter a valid input" 
    read inputLoop 
    validateInput $inputLoop 
} 

function validateInput() { 
    arg1="$1" 
    reference="r" 

##snip## 

    ##if DIR is !null but non-existent loop and ask for input 
    elif [[ ! -d .../UCP120/"$arg1"/ || ! -d .../UCP120/Week\"$arg1"/ ]]; then  
     recurCall $arg1 
     ##Recursive solutions don't require iterative control structures. 
     #while [[ snip (see if above) ]]; do 
     # recurCall $arg1 
     #done 
    fi 
} 

##Call the function. Get this ball rolling 
validateInput $1 

내 질문

은 다음과 같습니다 :
  1. 이이 일을 내가 단지 운 다음과 같이 코드는? 아니면 내가 합리적으로 잘 설계 할 수 있었습니까?
  2. 재귀는 이에 대한 현실적인 실행 가능한 솔루션입니까? 아니면 학습 운동에서 쓸모 없습니까?
  3. 내 의도적으로 시도한 본래의 시도와 같이 반복 내부에 재귀를위한 실제 응용 프로그램이 있습니까?
  4. 어떻게 개선 할 수 있습니까?

부적절한 질문을 보내 주셔서 감사합니다. 그러나 나는 그 광대 한 경험을 가진 인터넷이 나에게 이러한 개념에 대한 나의 이해를 도울 수 있기를 희망하고있다.

편집 : if then validateInput의 명령문. 이런 식으로 좀 더 이해하기 쉬운 함수 이름을 바꿨습니다. 상황에 따라 화면 너비를 줄이기 위해 제거되었습니다.

편집 : 화면 너비를 줄이기 위해 디렉터리 경로가 단축되었습니다.

답변

0
  1. 이것은 수천 개의 잘못된 입력을 입력하여 쉘의 스택 공간을 고갈시키지 않으면 작동합니다.
  2. 작동하기 때문에 실행 가능합니다. 그러나 나는 while-loop보다 이해하기가 더 어렵고, 후자를 선호한다. 그러나 그것은 미각의 문제일지도 모른다.
  3. 물론 반복 내에서 재귀를위한 응용 프로그램이 있지만 재귀에서 돌아온 후에 반복이 계속되지 않는 여기에서는 그렇지 않습니다.
  4. 재귀를 자제하십시오. ;-)