첨자에서 사용할 함수를 내보내는 스크립트가 있는데 조건에 따라 내보낸 함수를 변경하고 싶습니다. 조건부에서 두 가지 다른 함수를 선언할 수 있다는 것을 알고 있지만 가능하다면 그렇게 하지 않는 것이 좋습니다.
예는 다음과 같습니다.
#!/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
이나 함수를 선언에 포함시키는 안전한 자체 검사 방법을 제공하지 않으며 나는 이것이 대안이라고 생각합니다. 또는의 기능을 이동하고 싶지 않은 경우bar
my_func
foo
bar
입력하다 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
함수를 선언합니다. 그런 다음 내보냅니다.