CentOS 7.2를 실행하는 로컬 컴퓨터에서 다음을 수행합니다.
for i in {8..12}; do echo ${i}; done
나는 가지고있다:
8
9
10
하지만 내가 이렇게 하면:
for i in {08..10}; do echo ${i}; done
나는 가지고있다:
08
09
10
그러나 내가 액세스할 수 있는 CentOS 5.6을 실행하는 서버에서 다음 두 명령을 실행하면 동일한 출력이 생성됩니다.
8
9
10
왜 8과 9 앞에는 0이 없나요? bash 버전 때문인가요, 아니면 환경 구성 때문인가요? 서버가 10보다 작은 숫자 앞에 0을 넣도록 세션별로 또는 영구적으로 변경할 수 있습니까?
답변1
CentOS 5.6 시스템의 버전은 bash
버전 3일 가능성이 높습니다. 중괄호 확장의 정수 제로 패딩은 의 버전 4에서 도입되었습니다 bash
.
해결 방법은 설치를 bash
최신 버전으로 업데이트하거나 0으로 채워진 정수를 생성하는 대체 방법을 사용하는 것입니다.
printf '%02d\n' {8..10}
아니면 다음과 같은 것
for i in 0{1..9} {10..20}; do
echo "$i"
done
작동할 것입니다.
답변2
bash
zsh
대신 해당 구문의 소스를 사용할 수 있습니다 .
zsh
1995년(2.6-beta4에 도입)부터 지원되어 모든 CentOS 버전 (2004년 CentOS의 첫 번째 버전) {08..10}
에서 사용할 수 있습니다 .zsh
확장이 단어 분할의 대상이 되지 않도록 (따라서 이에 종속되지 않도록 ) 실제로 필요한 zsh
것처럼 예제에서 구문을 사용했습니다 .bash
echo "${i}"
echo ${i}
$i
$IFS
답변3
seq
또는 다음 명령을 사용할 수 있습니다.
$ seq -f "%02g" 8 10
08
09
10