
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 시스템의 이 버전 3 일 가능성이 높습니다 bash
. 중괄호 확장에서 정수를 0으로 채우는 기능은 버전 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 버전 {08..10}
에서 사용할 수 있습니다 (2004년 CentOS의 첫 번째 릴리스).zsh
단어 분할이 적용되지 않고 에 종속되지 않도록 확장하는 대신 필요한 zsh
대로 예제에서 실제로 구문을 사용했습니다 .bash
echo "${i}"
echo ${i}
$i
$IFS
답변3
seq
대안으로 명령을 사용할 수 있습니다
$ seq -f "%02g" 8 10
08
09
10