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