スクリプトでユーザーが入力した文字列の繰り返し

スクリプトでユーザーが入力した文字列の繰り返し

入力数を加算して合計を出力する基本加算関数を作成します。これは私の現在の機能です。

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

関連情報