base10이 작동하지 않습니다

base10이 작동하지 않습니다

나는 최근에 bash 스크립트를 사용하기 시작했고 0000에서 9999까지 계산되는 스크립트를 작성해 보았습니다. 꽤 간단한 작업이라고 생각했습니다. 그런 다음 bash가 0007을 8진수로 처리하고 0009 오류를 발생시키는 문제에 직면했습니다. base10을 사용하여 솔루션을 찾았지만 작동하지 않습니다. 내가 뭘 잘못했나요? 문제의 코드는 다음과 같습니다.

guess=0000
for guess in $(seq -f "%04g" 0000 9999)
do
echo $((10#guess))
guess=$((10#guess+1))
done

답변1

변수 확장으로 표시하기 위해 $변수 이름 앞에 ( )를 놓쳤습니다 .$guess

for guess in $(seq -f "%04g" 0000 9999)
do
  echo $((10#$guess))
  guess=$((10#$guess+1))
done

그렇지 않으면 산술 확장이 해당 값이 아닌 문자 그대로 $(())평가되어 guess값이 밑수에 비해 너무 크다는 오류가 발생합니다.

답변2

루프가 약간 중복되어 인쇄된 모든 값으로 for설정되므로 값을 직접 변경할 필요가 없습니다.guessseq

for guess in $(seq -f "%04g" 0000 9999) ;do
    guess=$((10#guess+1))
done

실제로 for루프는 다음과 비교하여 사용자가 수행한 할당을 거의 다룹니다.

$ for x in 9 6 3 ; do echo $x; x=1 ; done
9
6
3

(할당된 값은 1인쇄되지 않습니다.)

따라서 다음과 같습니다.

$ for x in $(seq -f "%04g" 1 2) ; do echo $x;  done
0001
0002

또는 printf다음 방법을 사용하여 원하는 형식의 숫자를 얻을 수 있습니다.

$ for x in $(seq 1 2) ; do printf "%04d\n" $x;  done
0001
0002

내 생각에 일부 시스템에는 그런 기능이 없으므로 seq필요하지 않습니다. Bash에서는 다음과 같이 작동합니다.

$ for (( x=0 ; x < 100 ; x++ )) ; do 
   printf "%04d\n" $x
  done

관련 정보