다른 이름으로 내보낸 함수

다른 이름으로 내보낸 함수

첨자에서 사용할 함수를 내보내는 스크립트가 있는데 조건에 따라 내보낸 함수를 변경하고 싶습니다. 조건부에서 두 가지 다른 함수를 선언할 수 있다는 것을 알고 있지만 가능하다면 그렇게 하지 않는 것이 좋습니다.

예는 다음과 같습니다.

#!/bin/bash

foo () { echo foo; }
bar () { echo bar; }

if [[ $var == foo ]]; then
    #in this case my_func() should execute foo()
    export -f my_func
elif [[ $var == bar ]]; then
    #in this case my_func() should execute bar()
    export -f my_func
fi

my_func() { foo "$@"; }조건부 내부처럼 내보내기 전에 간단한 시작 기능을 만들 수도 있을 것 같은데 , 이를 수행하는 더 좋은 방법이 있는지 묻고 있습니다.

답변1

아마도 이것이 당신이 제안한 것일 것입니다. 그러나 더 좋은 방법은 없다고 생각합니다. 쉘은 미리 선언된 실제 선언 foo이나 함수를 선언에 포함시키는 안전한 자체 검사 방법을 제공하지 않으며 나는 이것이 대안이라고 생각합니다. 또는의 기능을 이동하고 싶지 않은 경우barmy_funcfoobar 입력하다 my_func(즉, 별도의 함수로 만들 foo거나 bar별도의 함수로 만들 필요가 없습니다.) 그렇다면 여기서 보여주는 것이 아마도 가장 좋을 것입니다.

#!/bin/bash

foo () { echo foo; }
bar () { echo bar; }

case $var in
    foo) export -f foo; my_func () { foo "$@"; } ;;
    bar) export -f bar; my_func () { bar "$@"; } ;;
esac

export -f my_func

즉, 값에 따라 var사용 중인 적절한 함수를 내보내고 my_func함수를 선언합니다. 그런 다음 내보냅니다.

관련 정보