Unix-Shell-Skript Hinzufügen der Elemente eines Arrays Zusammen
Ich nicht viel Ahnung von arrays, aber ich versuche, fügen Sie die Elemente ein array ist definiert durch user-input von der "Lesen" - Befehl.
Ich dont denke, es ist ein Duplikat, dies ist eine Frage über das hinzufügen von array-Elementen
InformationsquelleAutor BobbyT28 | 2012-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
fügt jedes Element der Summe.
Sie können dies tun, mit "expr"?
ja,
tot=$(expr $tot + $i)
ok danke jetzt macht ein wenig mehr Sinn für mich
InformationsquelleAutor perreal
Gegeben ein array (Integer), hier ist eine lustige Art und Weise hinzufügen, um Ihre Elemente (in der bash):
z.B.,
Pro: Keine Schleife, keine subshell!
Con: funktioniert Nur mit Ganzzahlen
Bearbeiten (2012/12/26).
Als diese post bekam bis stieß, wollte ich mit Ihnen teilen eine andere lustige Art und Weise, mit
dc
, die dann nicht nur auf Ganzzahlen:Diese wunderbare Linie addiert alle zahlen. Ordentlich, eh?
Wenn Ihre zahlen sind in einem array
array
:In der Tat gibt es ein Problem bei negativen zahlen. Die Zahl '-42' gegeben werden sollte, um
dc
als_42
so:tun.
Pro: Arbeitet mit schwebenden Punkte.
Con: Verwendet einen externen Prozess (aber es gibt keine Wahl, wenn Sie wollen, um nicht-integer-Arithmetik — aber
dc
ist wohl das leichteste für diese Aufgabe).+1 für insane (ab-)Nutzung von IFS...
InformationsquelleAutor gniourf_gniourf
Mein code (die ich eigentlich nutzen) ist inspiriert von der Antwort des gniourf_gniourf. Ich persönlich halte das deutlicher zu Lesen/verstehen und zu ändern. Akzeptiert auch floating-Punkte, nicht nur Ganzzahlen.
Summe der Werte im array:
Mit der kleinen änderung, können Sie den Durchschnitt der Werte:
InformationsquelleAutor F-3000
Ich bin ein fan von Bündigkeit, so ist dies, was ich dazu neigen zu verwenden:
Es im wesentlichen nur Listen die Daten des array und übergibt es in BC die bewertet. Der "IFS" ist der interne Bereich getrennt, es im wesentlichen angibt, wie separate arrays, und wir sagten, trennen Sie diese mit einem plus-Zeichen, das bedeutet, dass wenn wir übergeben es in BC, erhält er eine Liste von zahlen getrennt durch plus-Zeichen, so natürlich fügt Sie zusammen.
<<<
simbol?echo ${nums[@]} | sed 's/ /+/g' | bc
so wir dont f' IFS
InformationsquelleAutor Amelia Hartman
gniourf_gniourf ist Antwort ist ausgezeichnet, da es nicht erforderlich ist, eine Schleife oder bc. Für alle interessierten in einem real-world-Beispiel, hier ist eine Funktion, die Summen aller CPU-Kerne Lesen von /proc/cpuinfo ohne irgendwelche IFS:
Fand ich auch die arithmetische Erweiterung funktioniert beim Aufruf das array innerhalb der doppelten Klammern, wodurch die Notwendigkeit für den read-Befehl:
Generic:
InformationsquelleAutor Banana
Anderen
dc
&bash
Methode:Ausgabe:
Oben läuft der Ausdruck
0 1 3.88 7.1 _1 + + + + p
mitdc
. Hinweis: die dummy-Wert0
denn es gibt auch viele+
s, und beachten Sie auch die üblichen negativen Zahl-Präfix-
muss geändert werden, um_
imdc
.InformationsquelleAutor agc
ich finde diese sehr einfach mit Zunehmender variable:
InformationsquelleAutor Alexei Grochev
Einfache Weise
InformationsquelleAutor rashedcs