Najprv môžete použiť tieto bash funkcia:
sum() {
local sum=0
for arg in "$@"; do
(( sum += arg ))
done
echo $sum
}
Druhý spôsob je urobiť non-opakovanie variant:
{ printf %d+ "$@"; echo 0; } | bc
Príklad
Dať vyššie v skript file, súčet.
#!/bin/bash
{ printf %d+ "$@"; echo 0; } | bc
Spustite ho ako tak:
$ ./sum 4
4
$ ./sum 4 4 5
13
Pre tretí spôsob, ako môžem odporučiť :
Nie je potrebné pre bash, obyčajný sh bude robiť aj:
#! /bin/sh -
IFS=+; echo "$(($*))"
$* v POSIX kotlov, rozširuje do zoznamu pozičné parametre (v tomto prípade argumenty skriptu) oddelené prvý znak $IFS (alebo priestor, ak $IFS je nastavená alebo nič, ak $IFS je prázdny). $((...)) je shell vnútorný priemer rozšírenie operátora (všimnite si, že to podporuje desatinné, octal a šestnástkové čísla)
Ak potrebujete plávajúce bod podpora, to je miesto, kde budete potrebovať rôzne shell, ako ksh93 alebo zsh (nie bash ako bash podporuje len celočíselnú aritmetiku), aj keď by ste mohli použiť aj ispell:
#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}
Že bude používať dlho (na celé číslo) a dvojlôžkové (pre pohyblivou rádovou čiarkou) typ čísla, tak ako je implementovaná váš systém. Vstupné čísla musia byť desatinné s pohyblivou rádovou čiarkou alebo inžinierske zápisu v anglickom štýle (s pohyblivou rádovou čiarkou oddeľovač je obdobie znakov bez ohľadu na to, locale). S niektorými ispell implementácií, to sa nepodarí, ak prvé číslo je záporné, ako ispell by sa snažiť interpretovať ako možnosť.
Niektoré ispell implementácií, ako GNU ispell, keď POSIXLY_CORRECT je v prostredí podporu aj hexadecimálne vrátane s binárnych exponent záznamy. Alebo s --non-desatinné-údaje, chápe octals a hexadecimálne:
$ POSIXLY_CORRECT=1 ./sum 0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum 010
8