다음을 사용하면 예상되는 결과를 얻습니다.
$ echo {8..10}
8 9 10
이 중괄호 확장을 간단한 방법으로 사용하여 다음 출력을 얻으려면 어떻게 해야 합니까?
$ echo {8..10}
08 09 10
나는 이제 이것이 seq
(시도하지 않고)를 사용하여 얻을 수 있다고 생각하지만 그것은 내가 원하는 것이 아닙니다.
유용한 정보는 내가 이 버전의 bash로 제한되어 있다는 것입니다. (해결책은 있지만 해결방안이 zsh
없다면 bash
공유해주세요)
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
답변1
0
각 항목의 너비를 동일하게 하려면 첫 번째 숫자 앞에 를 붙입니다 .
$ echo {08..10}
08 09 10
중괄호 확장에 대한 bash 매뉴얼 페이지에서:
제공된 정수 앞에 0을 붙여 각 항목의 너비를 동일하게 만들 수 있습니다. x 또는 y가 0으로 시작하면 쉘은 생성된 모든 용어가 동일한 자릿수를 포함하도록 강제하고 필요한 경우 0을 채웁니다.
또한 옵션을 사용하여 앞에 0을 채워서 너비를 균등화할 수 있습니다 seq
.-w
$ seq -w 8 10
08
09
10
$ seq -s " " -w 8 10
08 09 10
더 많은 제어를 원할 경우 printf 스타일 형식을 지정할 수도 있습니다.
$ seq -s " " -f %02g 8 10
08 09 10
답변2
나는 GNU bash, version 3.2.51(1)-release
원래 포스터()와 동일한 bash 버전을 가지고 있는데 {08..12}
그것은 나에게 작동하지 않지만 다음은 작동합니다:
for i in 0{8..9} {10..12}; do echo $i; done
08
09
10
11
12
이것은 약간 지루하지만 OP 버전의 bash(최신 버전인 것 같아요)에서는 작동합니다.
답변3
printf를 사용하는 경우
printf "%.2d " {8..10}
이렇게 하면 2개의 문자가 강제로 적용되고 앞에 0이 추가됩니다. 3자리 숫자가 필요한 경우 "%.3d"로 변경할 수 있습니다.
답변4
참고로 자동 고정 너비는 최신 버전의 bash에만 나타나는 것 같습니다.
$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
$ echo test{00..05}
test0 test1 test2 test3 test4 test5