Начиная с:
$ seq -f "http://10.10.10.%g:8080" 1 3
http://10.10.10.1:8080
http://10.10.10.2:8080
http://10.10.10.3:8080
Затем вы можете превратить это в функцию:
$ ddcount() { seq -f "http://10.10.10.%g:8080" "$@" ; }
$ ddcount 5 7
http://10.10.10.5:8080
http://10.10.10.6:8080
http://10.10.10.7:8080
(примечание :, так как это просто передает все аргументы команде seq
, ПЕРВЫЙ аргумент является необязательным и по умолчанию равен 1. т. е. seq 3
совпадает с seq 1 3
, а ddcount 3
совпадает с ddcount 1 3
. Вы также можете указать приращение, если оно необходимо. Подробнее см. man seq
)
Объедините это с другой функцией, чтобы объединить аргументы с помощью разделителя (, например. запятая):
$ join_by() { local d=$1; shift; printf '%s' "$1"; shift; printf '%s' "${@/#/$d}"; }
Эта функция смоделирована на основе функции perl join()
, но названа join_by
, поэтому не конфликтует с командой join
. Первый аргумент - разделитель. Остальные аргументы — это данные, которые нужно соединить.
$ join_by, $(ddcount 1 3)
http://10.10.10.1:8080,http://10.10.10.2:8080,http://10.10.10.3:8080
Примечание :Не заключайте в двойные кавычки -вызов функции $(ddcount 1 3)
-вы хотите, чтобы возвращаемая строка была словом -разделена на несколько элементов, а не просто одна длинная строка. Сравните вывод приведенной выше команды с join_by, "$(ddcount 1 3)"
, чтобы увидеть разницу.
Наконец, собрав все воедино:
start=1; stop=3
/usr/local/bin/apiserver --dubdub="$(join_by, $(ddcount "$start" "$stop"))" --master
или
dd="$(join_by, $(ddcount "$start" "$stop"))"
/usr/local/bin/apiserver --dubdub="$dd" --master