ก่อนคุณสามารถใช้ตามตบฟังก์ชัน:
sum() {
local sum=0
for arg in "$@"; do
(( sum += arg ))
done
echo $sum
}
ที่สองคือแนวทางของต้องทำเป็นคนที่ไม่ใช่การวนรอบผังย่อย:
{ printf %d+ "$@"; echo 0; } | bc
ตัวอย่างเช่น
วางอยู่เหนือยู่ในสคริปต์แฟ้มซำ.
#!/bin/bash
{ printf %d+ "$@"; echo 0; } | bc
วิ่งหนีมันเหมือนแล้ว:
$ ./sum 4
4
$ ./sum 4 4 5
13
สำหรับคนที่สามทางที่ฉันสามารถขอแนะนำ:
ไม่ต้องการเพื่อตบ,ธรรมดาขอโทษที่มากจะทำเช่นกัน
#! /bin/sh -
IFS=+; echo "$(($*))"
$*ใน POSIX เปลือกหอย,expands ต้องรายการของ positional พารามิเตอร์(ในกรณีนี้ที่อาร์กิวเมนต์สคริปต์)โดยแยกแต่ละตัวด้วยอักขระแรกของเงินเงื่อนไข(หรือพื้นที่ถ้า$เงื่อนไขคือยกเลิกตั้งค่าหรือไม่มีอะไรถ้า$เงื่อนไขว่างเปล่า). $((...))เป็นภายในเชลล์รวมอัตโนมัติ expansion โอเปอเรเตอร์(โปรดสังเกตว่ามันสนับสนุนทศนิยม,octal และค่าฐานสิบหกตัวเลข)
ถ้าคุณต้องการตัวเองลอยเคว้งคว้าประเด็นสนับสนุนซึ่งคุณจะต้องแตกต่างเชลล์เหมือน ksh93 หรือ zsh(ไม่ตบมือตบเดียวที่สนับสนุนจำนวนเต็มรวมอัตโนมัติ)แม้ว่าคุณอาจใช้ภาษาโปรแกรม awklanguage section:
#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}
มันจะใช้นาน(สำหรับจำนวนเต็ม)และสอง(สำหรับตัวเองลอยเคว้งคว้างจุด)ประเภทตัวเลขเป็นการจัดเตรียมไว้โดยระบบของคุณ ที่นำเข้าข้อมูลตัวเลขต้องเป็นทศนิยมตัวลอยบินบนฟ้าหรือวิศวกรรมเครื่องหมายไว้ที่ปฎิทินในรูปแบบภาษาอังกฤษ(ตัวเองลอยเคว้งคว้างจุดตัวแบ่งเขตด้านซ้ายคือช่วงเวลาตัวละครโดยไม่คำนึงถึงของค่าท้องถิ่น). กับบางอย่าภาษาโปรแกรม awklanguage section implementations มันจะผิดพลาดถ้าคนจำนวนแรกเป็นลเป็นภาษาโปรแกรม awklanguage section จะพยายามตีความเรื่องมันเป็นทางเลือก
บางอย่าภาษาโปรแกรม awklanguage section implementations เหมือน GNU ภาษาโปรแกรม awklanguage section ตอนที่ POSIXLY_CORRECT อยู่ในสภาพแวดล้อมยังสนับสนุนเลขฐานสิบหกรวมถึงกับไบนารีเอ็กซโปเน็นเชียล notations. หรือกับ..คนที่ไม่ใช่ทศนิยม-ข้อมูลของมันเข้าใจ octals และเลขฐานสิบหก:
$ POSIXLY_CORRECT=1 ./sum 0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum 010
8