UNIX에서 함수의 반환 값

UNIX에서 함수의 반환 값

다음 표현이 이해가 안 되네요.

function abc(){

..............

...............

[[ -f $filename]] && return 0 || return 1

}

튜토리얼에 따르면 이 함수는 파일 이름 변수 이름을 가진 파일이 있으면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

나는 && ||연산자를 이해하지만 이 명령문이 원하는 결과를 어떻게 얻습니까?

나에 따르면 [[ -f $filename ]]진술 중 하나가 거짓으로 평가 되면 &&and의 결과는 거짓입니다. 이제 OR로 가서 첫 번째 피연산자가 0이면 두 번째 피연산자의 결과를 반환하므로 1을 반환해야 하는데 0을 반환하고 있습니다.

이것은 어떻게 평가됩니까?

답변1

return함수의 마지막 줄에 있는 두 명령문을 모두 삭제할 수 있습니다.

[[ -f "$filename" ]]

이것은 두 개가 제거된 함수의 마지막 명령문입니다 return(인용된 변수 확장 및 이전에 추가된 공백에 유의하십시오 ]]). 함수의 "종료 값"은 이 명령문의 결과입니다.

파일이 $filename존재하면 함수는 0("성공", "예", "확인" 등을 의미) 값으로 종료되고, 그렇지 않으면 1(또는 더 일반적으로 0이 아닌 값)로 종료됩니다. 일종의 "실패"를 의미함) .


그것이 무엇인지 알지 않는 한 같은 줄에 ||혼합 하지 마십시오 . &&명령줄에서 다음과 같이

command1 && command2 || command3

다음과 같은 경우 마지막 명령이 실행됩니다.누구나이전 명령이 실패했습니다(0이 아닌 값을 반환함).

차라리 쓰세요

if command1; then
    command2
else
    command3
fi

만약에이것이 당신이 의미하는 바입니다.

이는 다음과 같은 명령에서 중요합니다.

[[ -f "$filename" ]] && echo "exists" || touch "$filename"

touch이것이 실패하면 명령 실행을 시도하며 echo, 문자열을 출력할 위치가 없으면(쓰기 오류 발생) 실행될 수 있습니다.

관련 정보