2011-11-03 4 views
3

저는 Bash에서 세번째 나누기 함수를 작성 중이며 변수를 숫자로 설정할 수 없습니다.1 : 명령을 찾을 수 없습니다.

fizzy.sh :

#!/usr/bin/env sh 

div3() { 
    return `$1 % 3 -eq 0` 
} 

d=div3 1 
echo $d 

예 : 당신은 ENV 변수 D에 문자열 div3를 할당하려고하기 때문에

$ ./fizzy.sh 
./fizzy.sh: line 7: 1: command not found 
+0

당신의'div3' 함수는 당신이 생각하는대로하지 않습니다. –

+1

그냥 레코드/구글 검색을 위해서 ==> 이것은 여기에 해당하지 않지만 실수로 등호 주위에 공백을 넣으면 정확히 같은 에러를 보게됩니다.'d = div3 1'과 올바른'd = div3 1 '. –

답변

4

배쉬 기능을 일반적으로 "반환"값을 .

return 문은 $?의 값을 설정합니다. 일반적으로 성공을 위해 0으로, 실패로 1로, 또는 지정된 종류의 실패로 다른 값으로 설정됩니다. 그것을 일반적인 가치가 아니라 상태 코드라고 생각하십시오. 나는 또한 #!/bin/sh#!/usr/bin/env sh에서 shebang line을 변경 한

#!/bin/sh 

div3() { 
    expr $1 % 3 = 0 # prints "0" or "1" 
} 

d=$(div3 1) 
echo $d 

참고 : 그것은이는 대신이 시도 255

0의 값을 지원할 가능성이 높습니다. #!/usr/bin/env 트릭은 $PATH을 통해 찾으려는 인터프리터 (예 : perl)를 호출 할 때 자주 사용됩니다. 그러나이 경우 sh이되며/bin/sh이됩니다 (그렇지 않은 경우 시스템이 여러 가지 방법으로 중단됩니다). 을 쓰는 유일한 이유는 에 처음 나타나는 sh 명령을 사용하려는 경우입니다. 이 경우에도 sh 경로를 직접 지정하는 것이 좋습니다.

2

d=div3 1 

라인은 범인 이것을 피하려면 백틱을 사용하여 평가 결과를 할당하십시오.

d=`div3 1` 

그러면 평가 기능에 다른 오류가 발생합니다. 명령으로 평가하려고하는 대신 인수에 대해 test를 실행해야합니다.

return `test $(($1 % 3)) -eq 0` 

출력은 있지만 오류는 없습니다. 실제로 예상되는 결과는 무엇입니까?

+0

@MattBall : 나는 거기에서도 가면으로 된 오류가있었습니다. 편집 됨, 감사합니다. – thiton

1
div3() { 
    return $((($1 % 3) == 0)) 
} 

d=$(div3 1) 
rc=$? 

echo $d 
echo $rc 


(blank line) 
0 

반환 값은 $ 값을 설정합니다. 함수가 값을 반환하려면 그냥 인쇄하십시오. 호출자가

`func args ...` 

또는

이 기능은 외부 명령처럼 작동하게
$(func args ...) 

를 사용하여 캡처 할 수있는 표준 출력에 인쇄하여

div3() { 
    printf $((($1 % 3) == 0)) "\n" 
} 
관련 문제