250 개 이상의 공감대가 있음에도 불구하고 내가 말하는 것을 신경 써야하는 이유
그것은 것이 아니다 0 = true
및 1 = false
. 그것은이다 제로 수단없이 실패 (성공) 및 비 - 제로 수단 장애 (N 형의) .
그동안 선택 대답은 기술적으로 "참" 제발 넣지 마십시오 return 1
에 대한 코드에서 ** 거짓 . 불행한 부작용이 몇 가지 있습니다.
- 숙련 된 개발자가 당신을 아마추어로 여기게됩니다 (아래 이유로).
- 숙련 된 개발자는이 작업을 수행하지 않습니다 (아래의 모든 이유로).
- 오류가 발생하기 쉽습니다.
- 숙련 된 개발자조차도 위와 같은 이유로 0과 1을 각각 false와 true로 오인 할 수 있습니다.
- 그것은 외롭고 우스운 의견을 요구하거나 장려 할 것이다.
- 실제로 암시 적 반환 상태보다 유용하지 않습니다.
배쉬 배우기
bash는 설명서가 말한다 (강조 광산)
반환 [n]
쉘 함수가 실행을 중지하고 호출자에게 n 값을 리턴하십시오. n이 제공되지 않으면 리턴 값은 함수에서 마지막으로 실행 된 명령 의 종료 상태입니다 .
따라서 True와 False를 나타 내기 위해 0과 1을 사용할 필요는 없습니다. 그들이 그렇게한다는 사실은 본질적으로 코드 디버깅, 질문 인터뷰 및 초보자의 마음을 사로 잡는 데 유용한 사소한 지식입니다.
bash 매뉴얼 은 또한 말합니다
그렇지 않으면 함수의 리턴 상태는 마지막으로 실행 된 명령 의 종료 상태입니다.
bash 매뉴얼 은 또한 말합니다
( $? ) 가장 최근에 실행 된 포 그라운드 파이프 라인 의 종료 상태로 확장됩니다 .
우와, 기다려 관로? bash 매뉴얼을 한번 더 봅시다 .
파이프 라인은 제어 연산자 '|'중 하나로 분리 된 하나 이상의 명령 시퀀스입니다. 또는 '| &'.
예. 그들은 1 개의 명령이 파이프 라인이라고 말했다. 그러므로,이 인용문들 모두가 같은 말을하고 있습니다.
$?
마지막에 일어난 일을 알려줍니다.
- 거품이 일어납니다.
내 대답
따라서 @Kambus는 이러한 간단한 기능으로 전혀 return
필요 하지 않음을 보여주었습니다 . 나는 이것을 읽을 대부분의 사람들의 요구와 비교할 때 비현실적으로 단순하다고 생각합니다.
왜 return
?
함수가 마지막 명령의 종료 상태를 반환한다면 왜 return
전혀 사용하지 않습니까? 함수 실행을 중지시키기 때문입니다.
여러 조건에서 실행 중지
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
우리가 여기있는 것은 ...
LHS가 true 인 경우에만 04
RHS &&
가 실행 되므로 Line 은 명시적인 [-ish] 리턴 true 입니다.
라인 09
은 라인 상태와 일치하는 true 또는 false를 반환합니다.08
줄 13
때문에 줄 이 false를 반환12
(예, 골프를 치를 수는 있지만 전체 예가 고려되었습니다.)
또 다른 일반적인 패턴
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
status
변수를 설정하면 의 의미를 어떻게 알 수 있는지 확인 하십시오 $?
. (물론 당신은 무슨 $?
의미 인지 알지만 언젠가는 구글보다 지식이 부족한 사람이 있습니다. 코드가 고주파 거래를하지 않는 한, 사랑을 보여주고 변수를 설정하십시오.) 그러나 실제로 테이크 아웃은 "만약 존재하지 않음 "또는 반대로"종료 상태 인 경우 "를 크게 읽고 의미를 설명 할 수 있습니다. 그러나 마지막 단어 exit
는 너무 야심적 일 수 있습니다. 단어 를 보면 실제로 스크립트가 종료되고 $(...)
서브 쉘 이 종료 될 때 스크립트를 종료한다고 생각할 수 있습니다 .
** 당신 return 1
이 거짓 을 절대적으로 사용한다고 주장한다면 , 적어도 return 255
대신 사용 하는 것이 좋습니다 . 이로 인해 미래의 자기 자신이나 코드를 유지해야하는 다른 개발자가 "왜 255입니까?" 그러면 그들은 적어도주의를 기울이고 실수를 피할 수있는 더 좋은 기회를 갖게 될 것입니다.
function
키워드를 삭제 ,myfun() {...}
충분