programing

셸에서 for-loop에 선행 0을 추가하는 방법은 무엇입니까?

minimums 2023. 5. 28. 20:31
반응형

셸에서 for-loop에 선행 0을 추가하는 방법은 무엇입니까?

반복할 때마다 변수 숫자를 1씩 증가시키는 루프의 기본 숫자를 가지고 있습니다.

for (( num=1; num<=5; num++ ))
do
 echo $num
done

출력 대상:

1
2
3
4
5

나는 그것이 결과물을 생산하도록 하려고 노력하고 있습니다($num 앞에 선행 0 추가).

01
02
03
04
05

수행하지 않음:

echo 0$num

다음 구문을 사용합니다.

$ for i in {01..05}; do echo "$i"; done
01
02
03
04
05

고지 사항: 선행 0은 다음에서만 작동합니다.>=bash-4.

사용할 경우printf다음과 같이 결과를 변수에 추가하여 사용할 수 있습니다.

$ foo=$(printf "%02d" 5)
$ echo "${foo}"
05

seq -w최대 입력 너비를 감지하고 출력 너비를 정규화합니다.

for num in $(seq -w 01 05); do
    ...
done

작성 당시에는 OSX의 최신 버전에서 이 기능이 작동하지 않았으므로 Macports를 설치하고 해당 버전의seq또는 형식을 명시적으로 설정할 수 있습니다.

seq -f '%02g' 1 3
    01
    02
    03

그러나 그러한 간단한 문제에 대한 형식 사양의 추악함을 고려할 때, 저는 Henk와 Adrian이 제시한 해결책을 선호합니다. 단지 Bash를 사용하는 것입니다.일반적인 "유닉스" 버전의 Bash가 없기 때문에 Apple은 이것을 망칠 수 없습니다.

echo {01..05}

또는:

for number in {01..05}; do ...; done

사용하다printf가지라는 명령0패딩:

printf "%02d\n" $num

for 루프는 다음과 같습니다.

for (( num=1; num<=5; num++ )); do printf "%02d\n" $num; done
01
02
03
04
05

저는 화면에 출력하는 것에 관심이 없습니다(그게 바로 printf가 주로 사용되는 것이죠?)$num 변수는 다른 프로그램의 매개 변수로 사용될 예정입니다. 하지만 이것으로 무엇을 할 수 있는지 보겠습니다.

여전히 사용할 수 있습니다.printf:

for num in {1..5}
do
   value=$(printf "%02d" $num)
   ... Use $value for your purposes
done

bash 4.0부터는 고정 길이 문자열과 함께 Brace Expansion을 사용할 수 있습니다.원래 발표 내용은 아래를 참조하십시오.

필요한 작업만 수행하고 셸 외부에 필요한 작업은 수행하지 않습니다.

$ echo {01..05}
01 02 03 04 05

for num in {01..05}
do
  echo $num
done
01
02
03
04
05

CHANGES, 릴리스 bash-4.0, 섹션 3

다음은 bash-3.2 릴리스 이후 bash-4.0에 추가된 새로운 기능에 대한 간결한 설명입니다.

. . .

이제 브레이스 확장을 사용하면 확장된 숫자 값을 제로 패딩할 수 있으며 모든 값에 동일한 자릿수가 포함되도록 적절한 수의 0이 추가됩니다.

그거 좋지printf '%02d' $num참조help printf이 내부 bash 명령의 경우.

참고 사항:저는 다양한 버전의 bash에서 다양한 행동을 경험했습니다.

  • 버전 3.1.17(1)-release-(x86_64-use-linux) 및
  • 버전 4.1.17(9)-릴리스(x86_64-unknown-cygwin)

전의경우자3(3.1)에 for nn in (00..99) ; do ...효과는 있지만,for nn in (000..999) ; do ...둘 다 버전 4.1에서 작동하지 않습니다. printf 동작을 테스트하지 않았습니다.bash --version정보 ).

건배, 얀

언급URL : https://stackoverflow.com/questions/18460123/how-to-add-leading-zeros-for-for-loop-in-shell

반응형