쉘 스크립트에서 호출 된 함수에서 값 반환
쉘 스크립트에서 호출 된 함수에서 값을 반환하고 싶습니다. 아마도 구문이 누락되었을 수 있습니다. 전역 변수를 사용해 보았습니다. 그러나 그것은 또한 작동하지 않습니다. 코드는 다음과 같습니다
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
Bash 함수는 원하는대로 직접 문자열을 반환 할 수 없습니다. 세 가지 일을 할 수 있습니다 :
- 문자열을 에코
- 문자열이 아닌 숫자 인 종료 상태를 반환합니다.
- 변수 공유
다른 쉘에서도 마찬가지입니다.
각 옵션을 수행하는 방법은 다음과 같습니다.
1. 에코 줄
lockdir="somedir"
testlock(){
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
echo "$retval"
}
retval=$( testlock )
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
2. 복귀 종료 상태
lockdir="somedir"
testlock(){
if mkdir "$lockdir"
then # Directory did not exist, but was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval=0
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval=1
fi
return "$retval"
}
testlock
retval=$?
if [ "$retval" == 0 ]
then
echo "directory not created"
else
echo "directory already created"
fi
3. 공유 변수
lockdir="somedir"
retval=-1
testlock(){
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval=0
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval=1
fi
}
testlock
if [ "$retval" == 0 ]
then
echo "directory not created"
else
echo "directory already created"
fi
당신은 너무 열심히 일하고 있습니다. 전체 스크립트는 다음과 같아야합니다.
if mkdir "$lockdir" 2> /dev/null; then
echo lock acquired
else
echo could not acquire lock >&2
fi
그러나 그조차도 너무 장황하다. 나는 그것을 코딩 할 것이다 :
mkdir "$lockdir" || exit 1
그러나 결과 오류 메시지는 약간 모호합니다.
테스트가 참 / 거짓 테스트 인 경우 return 0
성공 및 return 1
실패에 대한 기능 을 갖 습니다 . 테스트는 다음과 같습니다.
if function_name; then
do something
else
error condition
fi
I think returning 0 for succ/1 for fail (glenn jackman) and olibre's clear and explanatory answer says it all; just to mention a kind of "combo" approach for cases where results are not binary and you'd prefer to set a variable rather than "echoing out" a result (for instance if your function is ALSO suppose to echo something, this approach will not work). What then? (below is Bourne Shell)
# Syntax _w (wrapReturn)
# arg1 : method to wrap
# arg2 : variable to set
_w(){
eval $1
read $2 <<EOF
$?
EOF
eval $2=\$$2
}
as in (yep, the example is somewhat silly, it's just an.. example)
getDay(){
d=`date '+%d'`
[ $d -gt 255 ] && echo "Oh no a return value is 0-255!" && BAIL=0 # this will of course never happen, it's just to clarify the nature of returns
return $d
}
dayzToSalary(){
daysLeft=0
if [ $1 -lt 26 ]; then
daysLeft=`expr 25 - $1`
else
lastDayInMonth=`date -d "`date +%Y%m01` +1 month -1 day" +%d`
rest=`expr $lastDayInMonth - 25`
daysLeft=`expr 25 + $rest`
fi
echo "Mate, it's another $daysLeft days.."
}
# main
_w getDay DAY # call getDay, save the result in the DAY variable
dayzToSalary $DAY
참고URL : https://stackoverflow.com/questions/8742783/returning-value-from-called-function-in-a-shell-script
'Programming' 카테고리의 다른 글
JavaScript에서 쿼리 문자열 매개 변수를 어떻게 삭제합니까? (0) | 2020.07.26 |
---|---|
header (“Location :”)가있는 이전 페이지로 돌아 가기 (0) | 2020.07.26 |
zoo :: yearmon 객체에서 월과 연도 추출 (0) | 2020.07.26 |
MySQL에서 문자열을 열 값 앞에 추가하는 방법은 무엇입니까? (0) | 2020.07.26 |
.NET-“caps”구분 문자열을 어떻게 배열로 나눌 수 있습니까? (0) | 2020.07.26 |