f_sum(){local s=$1local i=0
for((i=0; i<${#1}; i++));do
s=$((s +${1:$i:1}))done
echo$s}arr=({1..10000})for i in{1..10000};do
s=`f_sum $i`idx=-1for((j=0; j<${#arr[@]}; j++));do
if[${arr[$j]}==$s];then
idx=$jbreak
fi
done
if[$idx!=-1];then
arr=(${arr[@]::$idx}${arr[@]:$idx+1})fi
done
for x in${arr[@]};do
echo$xdone
Bash에서 함수는 사용법, 파라미터 받는 법 등 모든 게 명령어와 똑같이 사용된다.
즉, Bash는 함수에서도 return을 종료코드로 사용하기 때문에 이를 사용하여 문자열을 리턴할 수 없다.
물론 숫자를 리턴해서 $?로 값을 받으면 되긴 하지만 0은 정상적인 종료, 그 외는 비정상적인 종료를 의미하기 때문에 사용하지 않는 것이 좋다.
대신 함수 내에서 리턴하고 싶은 문자열을 출력하고 그 값을 받으면 된다.
다른 언어들과 달리 Bash는 함수 내에서 변수를 선언하면 기본적으로 전역변수로 선언된다.
지역변수로 선언하려면 local 명령어를 사용하면 된다. (e.g. local var=val)