bash + return в скрипте bash только из функции или также в скрипте

Does the system-wide limit on argument count apply in shell functions?

Нет, это ограничение системного вызова execve(), используемого процессами для запуска другого исполняемого файла для замены текущего. Это не относится к функциям, которые интерпретируются текущим интерпретатором оболочки в том же процессе. Это также не относится к встроенным -утилитам.

execve()стирает память процесса перед загрузкой и запуском нового исполняемого файла. Весь смысл функций и встроенных функций в том, чтобы этого не происходило, чтобы функция могла изменять переменные и другие параметры оболочки, поэтому они обычно не используют execve().

Do they mimic system limits

or are they independent?

Да.

What are they?

Насколько позволяют ограничения ресурсов для текущего процесса оболочки.

В руководстве bash говорится:

Максимальный размер массива не ограничен, равно как и не требуется, чтобы элементы индексировались или присваивались непрерывно.

Похоже, это применимо, поскольку аргументы функции представляют собой внутренний массив оболочки (, который не передается execфункции ядра ).

Исторически ksh88и pdkshимели нижний предел для индексов массива, но не для числа аргументов функции. Вы могли получить доступ только к $1,... $9непосредственно в оболочке Bourne, но вы все равно могли передавать столько аргументов, сколько хотите, функциям и, например, перебирать их все с помощью for arg do...или передавать их вместе с другой функцией или встроенной с помощью "$@".

1
12.01.2021, 23:06
2 ответа

Да, вы можете, если этот скрипт находится в исходном коде. Возможно, вы захотите сделать это вместо выхода, потому что, если бы вы использовали выход, он также вышел бы из оболочки, из которой вы исходите, откуда бы не вернулся. Если вы запустите сценарий напрямую, он выдаст ошибку для строки returnи продолжит выполнение остальной части сценария.

2
18.03.2021, 22:37
if [[ "$0" == "${BASH_SOURCE[0]}" ]]; then
    # I'm the "main" script
    exit
else
    # I'm being sourced
    return
fi
3
18.03.2021, 22:37

Теги

Похожие вопросы