d 파일 에서 source
변수에 저장한 특정 명령의 종료 상태를 반환하고 싶습니다 return_val
.
네임스페이스를 오염시키지 않도록 이 변수를 설정 해제하고 해당 값을 반환하려면 어떻게 해야 합니까?
답변1
지역 변수(예: ksh, bash 또는 zsh)를 지원하는 셸을 사용하는 경우 모든 코드를 함수에 넣고 모든 변수를 지역 변수로 선언하세요.
일반 sh를 사용하면 eval
값을 사용하기 전에 변수 확장을 수행할 수 있습니다. 반품 상태에는 숫자만 포함되므로 까다로운 참조도 필요하지 않습니다.
eval "unset return_status; return $return_status"
답변2
변수 내용의 복사본을 유지하기 위해 STDOUT을 사용합니다.
# Unset a variable and then use its value afterwards
echo $_return_val | { unset _return_val; return "$(cat)"; }
답변3
지역 변수와 함께 함수를 사용할 수 있습니다
return_exit () {
local code=${!1}
unset "$1"
return "$code"
}
그런 다음 다음과 같이 호출하십시오.
return_exit _return_val
답변4
해결책에 대한 귀하의 욕구와 아이디어가 표준의 불특정 부분과 충돌하므로 중간 변수를 사용하여 값을 저장하는 것이 좋습니다.
물론 이는 여러 변수에 메서드를 적용하려는 경우에만 의미가 있습니다. $REPLY
쉘에 통합된 다양한 변수를 사용할 수 있습니다 .
{ cmd; }
서브쉘을 생성하지 않을 권한이 없으므로 unset
이러한 구성을 호출하더라도 메인 쉘에서는 작동하지 않을 수 있습니다.
사용
echo "$_return_val" && unset _return_val
내가 생각하는 모든 경우에 당신의 취향에 맞아야합니다.