다음 표현이 이해가 안 되네요.
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
, 문자열을 출력할 위치가 없으면(쓰기 오류 발생) 실행될 수 있습니다.