2014-01-20 4 views
3

스크립트 내에서 함수의 존재를 검사 할 수 있는지 궁금합니다. 나는. 이 같은 것을 할 수있는 경우에는 그 순간에, 나는 함수를 호출 한 다음 값을 확인하고 있다면 몇 가지가 있지만 궁금 해서요 : 스크립트 내에서 함수가있을 수 있습니다쉘 bash, 함수가 있는지 확인할 수 있습니까?

if[[ ${function_name}Function exists ]] 
then 
.....call function etc 
fi 

이것이 가능합니까?

답변

6
if type Function &>/dev/null 
then 
    ... 
fi 

예 : 여기에 내가 무엇을

$ type f 2>& /dev/null && echo f exists || echo f does not exist 
f does not exist 
$ f() 
> { 
> echo 1 
> } 
$ type f >& /dev/null && echo f exists || echo f does not exist 
f exists 

?

  • 여기에 함수 f이 있는지 먼저 확인합니다. 그것은 존재하지 않는다, 좋아.
  • 그럼 만듭니다.
  • 그런 다음 다시 확인합니다. 그것은 존재한다, ok.

추가 검사없이 명령, 별칭 또는 기능인 경우 직접 말할 수 없습니다. 이 엔티티가 존재하거나 존재하지 않는다면 당신이 알고있는 모든 것. 이 기능 만 기능을 실행하려면

, 당신은 당신의 검사가 엄격해야합니다 : 배쉬에서

type Function | grep -q '^function$' 2>/dev/null 

당신은 또한 declare -F function를 사용할 수 있습니다. (다른 사람에게 감사)

+2

+1. 더 간결하게, 그 조언을 하나의 테스트에 결합하십시오 : if [[$ (type -t $ funcname 2>/dev/null) == function]]; then echo "나는 함수 다." fi' –

+1

'선언 -F 함수>/dev/null' –

+0

"함수가 존재하면 bash에서 검사와 같은 연산이 없다"- 예있다. 'help declare'를 참조하십시오. – l0b0

0

declare -F은 Bash에서 선언 한 모든 기능을 보여줍니다. 거기에서 그것은이 방법은 너무 zsh에서 잘 작동, 내가 찾은 간단한 declare -F my_function && echo 'function exists'

0

가장 신뢰할 수있는 방법이다 BTW

FuncName='MyFunction' 
if typeset -f "${FuncName}" > /dev/null; then 
    "${FuncName}" 
fi 

입니다.

관련 문제