Переслать декларации в bash?

Есть ли такая вещь в bash или, по крайней мере, что-то подобное (work-around), например, форвардные объявления (хорошо известные в C/C++, например)?

Или там такая вещь, потому что она всегда выполнялась за один проход?

Если нет форвардных объявлений, что мне делать, чтобы сделать мой script более простой для чтения (он довольно длинный, и эти определения функций в начале, смешанные с глобальными переменными, делают мой script выглядит очень, очень уродливо и трудно читать/понимать)? Я прошу некоторых известных/лучших практик для таких случаев.


Например:

# something like forward declaration
function func

# execution of the function
func

# definition of func
function func
{
    echo 123
}

Ответ 1

Отличный вопрос. Я использую такой шаблон для большинства моих скриптов:

#!/bin/bash

main() {
    foo
    bar
    baz
}

foo() {
}

bar() {
}

baz() {
}

main "[email protected]"

Вы можете прочитать код сверху вниз, но он фактически не запускается до последней строки. Передавая "[email protected]" в main(), вы можете получить доступ к аргументам командной строки $1, $2 и другим, как обычно.

Ответ 2

Когда мои скрипты bash растут слишком сильно, я использую механизм include:

Файл allMyFunctions:

foo() {
}

bar() {
}

baz() {
}

Файл main:

#!/bin/bash

. allMyfunctions

foo
bar
baz