![숫자를 추가하는 스크립트에 문제가 있습니다.](https://linux55.com/image/130143/%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
지금 스크립트를 제출하는 데 문제가 있습니다. 현재 진행 중인 상황을 왜 받아들이지 않는지 아시는 분이 계시는지 궁금합니다. 6, 9, -4, 7을 함께 추가하려고 하는데 내 스크립트가 이를 수행하고 있습니다. 어쩌면 그것을 개선할 수 있는 방법이 있을까요? 어떤 아이디어라도 큰 도움이 될 것입니다.
#!/bin/bash
sum=0
for number in $1 $2 $3 $4
do
sum=$(($1 + $2 + $3 + $4))
echo $number
done
echo $sum
답변1
숫자 4개만 추가하려면 다음과 같이 하면 충분합니다.
sum() {
printf '%d\n' "$(( $1 + $2 + $3 + $4 ))"
}
또는 원하는 수의 숫자를 추가하려는 경우:
sum() {
local number sum
for number; do
(( sum += number ))
done
printf '%d\n' "$sum"
}
답변2
쉘이 당신을 위해 일하도록 하세요. 그리고 필요할 때 외부 유틸리티를 사용하세요.
#!/bin/bash
IFS=+
echo "$*" | bc
답변3
명령줄에 항상 4개의 정수가 표시된다는 점을 알고 있다면 반복할 필요가 없습니다.
#!/bin/sh
sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"
아니면 그냥
#!/bin/sh
printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"
다양한 매개변수를 지원하려면~ 할 것이다반복해야 할 사항:
#!/bin/sh
while [ "$#" -gt 0 ]; do
sum=$(( sum + $1 ))
shift
done
printf 'sum is %d\n' "$sum"
스크립트는 명령줄 인수를 반복하여 첫 번째 인수를 sum
변수에 추가하고 인수가 더 이상 남지 않을 때까지 명령줄 인수 목록에서 제거합니다. 변수 $#
확장은 명령줄 인수 수만큼 확장되며 shift
목록에서 제거되고 해당 위치(다른 위치 중에서)로 이동됩니다.$1
$2
$3
$2
또는:
#!/bin/sh
for num do
sum=$(( sum + num ))
done
printf 'sum is %d\n' "$sum"
명령줄 인수 목록을 계속해서 이동하고 목록을 변경하지 않고 그대로 두는 대신 반복하여 각 인수를 차례로 추가합니다 sum
.
루프 for num do
헤더는 다음과 같이 작성할 수도 있습니다 for num in "$@"; do
.