Позиционные параметры области действия вызывающего объекта недоступны в функции. Вам нужно, чтобы вызывающий объект так или иначе передал их функции.
В bash
это можно сделать с помощью массива (, но имейте в виду, что массивы, отличные от "$@"
в bash
, начинаются с индекса 0 вместо 1 (, как в ksh
, но в отличие от все остальные оболочки )).
f() {
printf 'Caller $1: %s\n' "${caller_argv[0]}"
printf ' My $1: %s\n' "$1"
}
caller_argv=("$@")
f blah
Или передать их дополнительно:
f() {
printf 'Caller $1: %s\n' "$2"
shift "$(($1 + 1))"
printf 'My $1: %s\n' "$1"
}
f "$#" "$@" blah
Здесь $1
содержит количество позиционных аргументов вызывающего объекта, поэтому f
знает, где начинаются его собственные аргументы.
Если вы используете тег 7.2-debian-10-prod
, чтобы получить образ на основе Debian 10 (Buster ), все работает нормально:
docker pull bitnami/php-fpm:7.2-debian-10-prod
Внутри контейнера запустите apt update && apt install -y php-smbclient php-sybase
.