재귀 구문 설명

재귀 구문 설명

저는 쉘과 UNIX/GNU/Linux를 처음 접했습니다.

재귀 함수의 일부로 구문을 이해하려고 합니다.

 [ $i -le 2 ] && echo $i || { f=$(( i - 1)); f=$(factorial $f); f=$(( f * i )); echo $f; }

(에서 가져옴여기)

완전한 관련 기능은 다음과 같습니다:

factorial(){
  local i=$1
  local f
  declare -i i
  declare -i f
  [ $i -le 2 ] && echo $i || { f=$(( i - 1)); f=$(factorial $f); f=$(( f * i )); echo $f; }

}

[$i -le 2 ]위치 인수가 2개 이상 있는지 확인하는 것을 의미한다는 것을 이해합니다 . 이중 배럴 표기법(또는 ?)이 무엇인지 이해하지 못합니다. 당신은 또 무엇을 합니까 {}? 루프에 대한 매개변수가 4개입니까?

고마워요, 데이비드

답변1

첫 번째,

local i=$1

$1의 값을 i에 할당합니다. $1은 함수의 첫 번째 매개변수입니다. 또는 함수 외부에서는 명령이나 스크립트에 대한 첫 번째 위치 인수를 나타냅니다.

다음은 매우 직관적입니다. -i는 변수가 정수임을 나타냅니다.

  local f
  declare -i i
  declare -i f

이제 긴 이야기를 해보겠습니다. 명확성을 위해 이것을 별도의 줄로 나누겠습니다.

[ $i -le 2 ]    #checks if $i is less or equal 2

&&    #this is logical AND. This is used so: X && Y, meaning if X computes to true, then compute Y. So for this function, the meaning is: if $i less or equals 2, do the following:

echo $i     #this follows the logical && above, so is computed conditionally. Namely, print $i.

||    #this is logical OR, so what follows is computed only if what's on the left boils down to false.
      #Here the meaning is, IF NOT $i -le 2 AND echo... (which doesn't matter), do what's on the right. So do what's in the {} braces, if $i is greater than 2.

이제 남은 것은 이것이다.

 { f=$(( i - 1)); f=$(factorial $f); f=$(( f * i )); echo $f; }

중괄호 {}는 엔터티로 처리되는 블록 내부의 내용을 만듭니다. 여기서의 상황을 가장 간단한 방식으로 설명하기 위해 앞서 && 및 || 논리를 소개했습니다. 이제 전체 블록에 적용됩니다. 이제 부품으로 넘어갑니다.

f=$(( i - 1));

$(( ))는 산술 연산자입니다. f=지금쯤이면 아실 겁니다. 전체 표현식은 f해당 표현식에 할당된 값을 의미합니다 i - 1.

블록의 다양한 부분이 어떻게 세미콜론으로 끝나는지 확인하세요 ;.

f=$(factorial $f);

이 함수는 위에서 호출되었습니다. 이것이 재귀가 들어오는 곳입니다. 문자 그대로의 의미: f인수를 사용하여 호출된 함수의 계승에 할당된 반환 값입니다. $f(할당에는 $가 필요하지 않다는 것을 알 수 있습니다. $( ))명령 대체. 단순히 이름으로 함수를 호출하여 함수를 호출할 수 있지만 변수 값 할당의 경우 값이 어떻게든 전달되어야 하며 이것이 여기서 수행되는 방식입니다.

f=$(( f * i ));

위에서 다시 산술 연산자를 볼 수 있습니다 $(( )). f여기서 얻은 값 (이 시점에서 times 와 f동일)은 함수의 $1 매개변수와 같습니다.$(factorial $f)i

마지막으로 인쇄된 값은 다음과 같습니다 f.

echo $f;

답변2

||

논리적 또는

{}

함수 또는 명령 세트의 시작-끝

for

3개 매개변수: 초기화, 조건, 반복자 변경

{ f=$(( i - 1)); f=$(factorial $f); f=$(( f * i )); echo $f; }

인라인 함수는 숫자를 반환합니다.

관련 정보