入力数を加算して合計を出力する基本加算関数を作成します。これは私の現在の機能です。
function addition() {
read -a arr
for i in ${arr[@]}
do
str=$str'+'$i
echo $i
done
echo $str
}
しかし、これは入力が必要で、上記の内容を出力するようです。私も以下を試してみました。
function addition() {
for i in ${input[@]}
しかし、これは空の文字列を出力します。このコマンドを受け入れる関数をどのように作成できますか?
$ addition 4 3 13 40
関数を入力しますか?
答え1
read
スクリプト/関数がコマンドラインから数字を取得する場合は、それを読み取るために(stdinから読み取る)を使用する必要はありません。
代わりに:
addition () {
sum=0
for number do
sum=$(( sum + number ))
done
printf 'Sum is %d\n' "$sum"
}
このループは、次のようにさらに明示的に作成することもできます。
for number in "$@"; do
sum=$(( sum + number ))
done
両方のループバリアントでは、変数にはnumber
各位置引数(「コマンドライン引数」)の値が順番に割り当てられ、ループ本体はこれらの値を変数に追加しますsum
。
上記のコードでは、すべてのコマンドライン引数が整数であると仮定していますが、整数であることを確認するわけではありません。
高度な出力が必要な場合:
addition () {
sum=0
for number do
sum=$(( sum + number ))
done
( IFS='+'; printf '%s = %d\n' "$*" "$sum" )
}
"$*"
位置パラメータと区切り文字の最初の文字で連結された単一の文字列に展開されます$IFS
。
テスト:
$ addition 1 2 3 90 32
1+2+3+90+32 = 128