Описание тега exchange
С сдвиг "$#"
ты пустой $@
полностью. На $@
в функции отдельно от $@
в основной скрипт. Поскольку вы точно знаете, сколько элементов скрипта $@
нужно использовать и сдвиг в режиме, почему бы тебе просто не передать все аргументы функции, а затем переход от первых трех?
#! /бин/Баш --
комплект -х
## докер-сочинять фантик
compose_fn() {
местные ОКР="$1"
местные глагол="$2"
местная служба="$3"
местные КМД=( докер-сочинять -Ф "$ОКР.в формате YML" )
сдвиг 3 #, мы использовали три аргумента
случае $глагола в
свдв)
# Выполнить команду в запущенном контейнере.
если [ -н "$обслуживание" ]; затем
"${команду cmd[@]}" "$глагола" "сервис$" "$@"
еще
Эхо '## ошибка: Вы должны указать имя сервиса...' >&2
выход 1
интернет
;;
*)
неизвестный глагол е ': %з\п' "$глагола" >&2
выход 1
эсок
}
compose_fn "$@"
Я также использовать строчные имена переменных так, что ни одна система или специальный снаряд переменные используются случайно (ОКР
является одним, что некоторые снаряды использует при некоторых обстоятельствах, к примеру), и я удалил все ненужные кавычки и фигурные скобки.
Я вот тоже поставил команду в массив, так что мы можем процитировать правильно и YAML именем.
Также можно просто перенести настройки из трех переменных вне функции, в зависимости от того, что остальная часть скрипта выглядит и если это делает никакого смысла вообще. Затем три переменные будут глобальными по своему сценарию.
#! /бин/Баш --
комплект -х
## докер-сочинять фантик
compose_fn() {
местные КМД=( докер-сочинять -Ф "$ОКР.в формате YML" )
случае $глагола в
свдв)
# Выполнить команду в запущенном контейнере.
если [ -н "$обслуживание" ]; затем
"${команду cmd[@]}" "$глагола" "сервис$" "$@"
еще
Эхо '## ошибка: Вы должны указать имя сервиса...' >&2
выход 1
интернет
;;
*)
неизвестный глагол е ': %з\п' "$глагола" >&2
выход 1
эсок
}
ЕНВ="$1"
глагол="$2"
сервис="$3"
сдвиг 3
compose_fn "$@"
Вы можете также обойти [ -Н "$обслуживание" ]
тест с
обслуживание=${3:?'## Ошибка: Вы должны указать имя сервиса...'}
Параметр расширения ${параметр:?слово}
выйдет из оболочки с сообщением, определяется словом
если параметр
не установлен или пуст. В Баш
оболочка формате это как
script.sh: строка 9: 3: ## ошибка: Вы должны указать имя сервиса...
Связанные: