스크립트에서 사용자가 입력한 문자열에 대한 반복

스크립트에서 사용자가 입력한 문자열에 대한 반복

입력 숫자를 더하고 합계를 출력하는 기본 덧셈 함수를 만들어 보세요. 이것은 내 현재 기능입니다.

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

관련 정보