В приведенной ниже функции с 9 аргументами:
SUM() {
echo "The sum is $(($1+$2+$3+$4+$5+$6+$7+$8+$9))"
}
Я хочу, чтобы вторые аргументы для следующего (3..9) стали необязательными аргументами .
Когда я вызываю функцию с двумя аргументами, я получаю сообщение об ошибке:
SUM 3 8
bash: 3+8+++++++: syntax error: operand expected (error token is "+")
Примечание BOLD : первый аргумент и второй аргумент являются принудительными аргументами и не являются обязательными для функции. Я только хочу, чтобы вторые аргументы к следующему были необязательными, и когда я вызываю функцию, содержащую менее 2 аргументов, функция не должна возвращать никакого результата.
Посмотрите на
shift
оператора. Он сместит аргументы 2 и далее в позиции 1 и далее, отбросив аргумент 1.источник
Вы можете использовать рекурсивное определение, которое заканчивается, когда
sum
вызывается без аргументов. Мы используем тот факт, чтоtest
без аргументов оцениваетfalse
.источник
Попробуй это:
Это выведет 12 и 30.
$@
ссылается на параметр,$#
возвращает номер параметра, в данном случае 3 или 11.Проверено на Linux Redhat 4
источник
Вы можете просто использовать небольшой цикл:
Лично я бы просто использовал
perl
илиawk
вместо этого:или
источник
Используйте 0 в качестве значений по умолчанию для $ 1 до $ 9:
От
man bash
:Примеры:
Сумма 0
Сумма 3
Сумма 9
Тот же вывод с awk:
источник
Это также мое собственное решение, которое я попробовал и нашел:
Но ответ @ Муру хорош.
источник