在脚本中循环用户输入的字符串

在脚本中循环用户输入的字符串

尝试创建一个基本的加法函数,将输入的数字相加并输出总计。这是我当前的功能:

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(从标准输入读取)来读取它们。

反而:

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

相关内容