나는 최근에 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
설정되므로 값을 직접 변경할 필요가 없습니다.guess
seq
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