답변:
다른 사람들이 말했듯이 그렇게 할 수 없습니다.
그러나 주 프로그램이 파일의 맨 위에 있고 다른 함수가 아래에 정의되도록 코드를 하나의 파일로 정렬하려면 별도의 main
함수 를 사용하여 수행 할 수 있습니다 .
예 :
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "$@"; exit
main
파일 끝에서 호출하면 모든 함수가 이미 정의되어 있습니다. 스크립트에서 명령 행 인수를 함수에 표시하려면 명시 적으로 전달 "$@"
해야 main
합니다.
exit
main에 대한 호출과 동일한 행에있는 명시 적은 필수는 아니지만 스크립트 파일이 수정 된 경우 실행중인 스크립트가 엉망이되는 것을 방지하는 데 사용할 수 있습니다. 그것이 없으면, 쉘은 main
리턴 후에 스크립트 파일에서 명령을 계속 읽으려고 시도 합니다. ( 전체 셸 스크립트를 실행하기 전에 읽는 방법을 참조하십시오 . )
[[ ${BASH_SOURCE[0]} = "$0" ]] && Main "$@"
하면 주 함수를 호출하는 데 자주 사용 되므로 Main
실행 하지 않고 다른 스크립트에서 소스를 사용할 수 있습니다 . 그런 다음 함수를 재사용하거나 테스트를 작성하여 확인할 수 있습니다.
main "$@"; exit
(와 exit
같은 라인과 (와) 같은 것은 main
그것을 해석하는 동안 파일에 대한 보호가 수정되는대로)도 유용하다.
exit
것과 같은 행에 놓으면, 그 함수를 정의하는 것을 제외하고, 무엇이든하기 시작하기 전에 모든 것을 main
읽어야 main
합니다.
main; exit
, main; exit $?
또는 main <EOF>
모든 경우의 종료 코드 main
스크립트의 종료 코드로 사용됩니다. 는 exit
누군가가 실행 중에 스크립트를 편집 할 경우 단지 엉망지고 일을 방지하는 것입니다.
아니오, 함수는 호출 할 때 쉘 환경에 존재해야합니다.
Google의 "쉘 스타일 가이드" 에 다음과 같은 수정 사항이 있습니다.
main
하나 이상의 다른 함수를 포함 할 수있을 정도로 긴 스크립트에는 호출 된 함수 가 필요합니다.
스크립트의 맨 마지막에는 모든 함수 다음에 함수에없는 유일한 명령문으로서
main "$@"
이것은 main
스크립트에 주어진 매개 변수로 함수를 호출합니다 . 이 main
기능은 스크립트 상단에 위치 할 수 있습니다 (스타일 가이드는 하단에 배치한다고 말하지만 다시 많은 것을 말합니다).
셸이 main
호출되면 스크립트의 모든 함수가 구문 분석되어 main
함수 내에서 호출 될 수 있습니다 .
아니요, 함수는 사용하기 전에 선언해야합니다. 쉘 스크립트는 한 줄씩 읽히고 한 줄씩 실행됩니다. 따라서 선언이 실행될 때까지 함수가 존재하지 않습니다.
C
이 편안합니다.
. yourfile
).
if
함수 외부에 간단한 설명 이 없습니다 . 이 기능은 당신이 때 정의 할 필요가 없습니다 선언if
당신이 바로 그 때, 함유 함수를 호출 을.
쉘에는 declaring
기능 개념이 없습니다 . 따라서 앞으로 선언 할 수 없습니다.
결과적으로, 호출하기 전에 쉘이 함수 구현을 읽도록해야합니다.
autoload f
bash