종료 코드와 관련하여 Bash 함수에서 return
및 exit
명령문 의 차이점은 무엇입니까 ?
답변
에서 man bash
에 return [n]
;
함수가 실행을 중지하고 n으로 지정된 값을 호출자에게 반환합니다. n이 생략되면 리턴 상태는 함수 본문에서 마지막으로 실행 된 명령의 상태입니다.
…에 exit [n]
:
쉘을 n 상태로 종료하십시오. n을 생략하면 종료 상태는 마지막으로 실행 된 명령의 종료 상태입니다. EXIT의 트랩은 쉘이 종료되기 전에 실행됩니다.
편집하다:
종료 코드와 관련하여 질문을 편집 한 결과 종료 코드와 관련 return
이 없습니다. 종료 코드는 기능이 아닌 응용 프로그램 / 스크립트를 위한 것입니다 . 따라서 이와 관련하여 스크립트의 종료 코드를 설정하는 유일한 키워드 ( $?
셸 변수를 사용하여 호출 프로그램이 포착 할 수있는 키워드 )는 exit
입니다.
편집 2 :
마지막으로 언급 한 내용 exit
은 몇 가지 의견을 제시합니다. 그것은 차별화하기로 결정했습니다 return
과 exit
영업 이익의 이해, 그리고 사실에서 어떤 프로그램 / 쉘 스크립트의 특정 시점,exit
호출 프로세스 종료 코드와 스크립트를 종료하는 유일한 방법입니다.
그것은 설정 : 쉘에서 실행되는 모든 명령은 로컬 “종료 코드”를 생산하고 $?
그 코드에 변수와 함께 사용할 수 있습니다 if
, &&
및 조건에 다른 사업자가 다른 명령을 실행합니다.
이 종료 코드 (및 $?
변수 값 )는 각 명령 실행에 의해 재설정됩니다.
또한, 스크립트에 의해 실행 된 마지막 명령의 종료 코드는 호출 프로세스에서 볼 수 있듯이 스크립트 자체의 종료 코드로 사용됩니다.
마지막으로 함수는 호출 될 때 종료 코드와 관련하여 쉘 명령으로 작동합니다. 함수의 종료 코드 (함수 내 )는를 사용하여 설정됩니다 return
. 따라서 return 0
함수에서 실행될 때 함수 실행이 종료되고 종료 코드는 0입니다.
답변
return
현재 함수가 범위를 벗어나는 반면 exit
스크립트는 호출 된 지점에서 종료됩니다. 다음은이를 설명하는 데 도움이되는 샘플 프로그램입니다.
#!/bin/bash
retfunc()
{
echo "this is retfunc()"
return 1
}
exitfunc()
{
echo "this is exitfunc()"
exit 1
}
retfunc
echo "We are still here"
exitfunc
echo "We will never see this"
산출
$ ./test.sh
this is retfunc()
We are still here
this is exitfunc()
답변
나는 두 사람이 어떻게 사용되는지 설명하지 않기 때문에 누군가가 질문에 완전히 대답했다고 생각하지 않습니다. 알겠습니다. exit는 스크립트가 호출되는 모든 위치에서 스크립트를 종료하고 종료 또는 종료 0 또는 종료 7과 같은 상태를 스크립트에 할당 할 수 있다는 것을 알고 있습니다. 다른 스크립트 등에 의해 호출 된 경우 스크립트가 강제로 중지 된 방법을 판별하는 데 사용할 수 있습니다. 종료시 충분합니다.
호출시 return은 함수의 동작을 나타내도록 지정된 값 (일반적으로 1 또는 0)을 반환합니다. 예를 들면 다음과 같습니다.
#!/bin/bash
isdirectory() {
if [ -d "$1" ]
then
return 0
else
return 1
fi
echo "you will not see anything after the return like this text"
}
다음과 같이 확인하십시오.
if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi
또는 이와 같이 :
isdirectory || echo "not a directory"
이 예제에서는 테스트를 사용하여 디렉토리를 찾았는지 여부를 표시 할 수 있습니다. 리턴 후에는 함수에서 실행되지 않습니다. 쉘에서 0은 true이지만 다른 prog lang과는 달리 false는 1입니다.
함수에 대한 자세한 정보 :
http://www.linuxjournal.com/content/return-values-bash-functions
참고 : isdirectory 기능은 설명을위한 것입니다. 실제 스크립트에서 이러한 옵션을 수행하는 방법이 아닙니다.
답변
함수는 스크립트 내부에 있으며 일반적으로 return 문을 사용하여 호출 한 시점에서 반환합니다. 외부 스크립트를 호출하는 것은 완전히 다른 문제이며 스크립트는 일반적으로 exit 문으로 종료됩니다.
“종료 코드와 관련하여 BASH 함수의 return 및 exit 문 간의 차이”는 거의 없습니다. 둘 다 값 자체가 아닌 상태를 반환합니다 . 상태 0은 성공을 나타내고 다른 상태 (1-255)는 실패를 나타냅니다. return 문은 스크립트가 호출 된 곳에서 스크립트로 돌아가고 exit 문은 스크립트가있는 곳에서 전체 스크립트를 종료합니다.
return 0 # returns to where the function was called. $? contains 0 (success).
return 1 # returns to where the function was called. $? contains 1 (failure).
exit 0 # exits the script completely. $? contains 0 (success).
exit 1 # exits the script completely. $? contains 1 (failure).
함수가 단순히 return 문없이 끝나는 경우 마지막으로 실행 된 명령의 상태가 상태 코드로 반환되며 $?
).
return and exit는 0에서 255 사이의 상태 코드를 반환합니다. $?
합니다. 상태 코드에 다른 것을 넣을 수 없습니다 (예 : “cat”반환). 이거 작동 안 할거야. 그러나 스크립트는 상태 코드를 사용하여 실패에 대한 255 가지 다른 이유를 전달할 수 있습니다.
호출 스크립트에 포함 된 변수를 설정하거나 함수에서 결과를 반향하고 호출 스크립트에서 명령 대체를 사용할 수 있습니다. 그러나 리턴 및 종료의 목적은 C와 같은 프로그래밍 언어에서 예상되는 값 또는 계산 결과가 아닌 상태 코드를 전달하는 것입니다.
답변
때때로, 당신은 사용하여 스크립트를 실행 .
하거나 source
.
. a.sh
당신이 포함하는 경우 exit
의를 a.sh
, 그냥 스크립트를 종료하지만, 쉘 세션을 종료하지 않습니다.
당신이 포함 된 경우 return
에서 a.sh
, 단순히 스크립트 처리를 중지합니다.
답변
간단한 말로 (주로 코딩의 초보자를 위해), 우리는 말할 수 있습니다.
`return` : exits the function,
`exit()` : exits the program(called as process while running)
또한 당신이 관찰한다면, 이것은 매우 기본이지만 …
`return` : is the keyword
`exit()` : is the function
답변
-
exit
현재 프로세스를 종료 ; 종료 코드 유무에 관계없이이를 프로그램 기능 이상의 시스템으로 간주하십시오. 소싱 할 때exit
셸이 종료되지만 실행하면exit
스크립트 만 종료 됩니다. -
return
함수에서 호출 후 리턴 코드 유무에 관계없이 명령으로 돌아갑니다.return
선택 사항이며 함수 끝에서 암시 적입니다.return
함수 안에서만 사용할 수 있습니다.
소스를 제공하는 동안 exit
쉘을 죽이지 않고 함수 내에서 스크립트를 사용하는 것은 쉽지 않습니다 . 예를 들어 ‘테스트’스크립트에서 더 낫습니다.
#!/bin/bash
function die(){
echo ${1:=Something terrible wrong happen}
#... clean your trash
exit 1
}
[ -f /whatever/ ] || die "whatever is not available"
# now we can proceed
echo "continue"
다음을 수행
user$ ./test
Whatever is not available
user$
test
쉘이 닫힙니다.
user$ . ./test
Whatever is not available
뿐 test
완료되고 메시지가 표시됩니다.
상기 용액의 잠재적 절차를 둘러싸이고 (
및)
#!/bin/bash
function die(){
echo $(1:=Something terrible wrong happen)
#... clean your trash
exit 1
}
( # added
[ -f /whatever/ ] || die "whatever is not available"
# now we can proceed
echo "continue"
) # added
이제 두 경우 모두 test
종료됩니다.