[bash] Bash 또는 Shell 스크립트에서 함수 선언을 전달 하시겠습니까?

bash를 들어 C / C ++에서 잘 알려진 포워드 선언과 같은 것 또는 적어도 유사한 (해결 방법)이 있습니까?

아니면 예를 들어 항상 한 번의 패스 (한 줄씩)로 실행되기 때문에 그런 것이 있습니까?

전방 선언이없는 경우 스크립트를 더 쉽게 읽을 수 있도록하려면 어떻게해야합니까? 다소 길고 처음에는 이러한 함수 정의가 전역 변수와 혼합되어 스크립트가보기 흉하고 읽기 / 이해하기 어렵게 만듭니다)? 나는 그러한 경우에 대해 잘 알려진 / 모범 사례를 배우기를 요청하고 있습니다.


예를 들면 :

# something like forward declaration
function func

# execution of the function
func

# definition of func
function func
{
    echo 123
}



답변

좋은 질문입니다. 대부분의 스크립트에 다음과 같은 패턴을 사용합니다.

#!/bin/bash

main() {
    foo
    bar
    baz
}

foo() {
}

bar() {
}

baz() {
}

main "$@"

위에서 아래로 코드를 읽을 수 있지만 실제로는 마지막 줄까지 실행을 시작하지 않습니다. 전달하여 "$@"메인에 () 명령 줄 인수에 액세스 할 수 있습니다 $1, $2, 등 당신이 평소처럼.


답변

bash 스크립트가 너무 커지면 포함 메커니즘을 사용합니다.

파일 allMyFunctions:

foo() {
}

bar() {
}

baz() {
}

파일 main:

#!/bin/bash

. allMyfunctions

foo
bar
baz


답변