변수를 사용한 중괄호 확장이 예상대로 작동하지 않는 이유는 무엇입니까? [복사]

변수를 사용한 중괄호 확장이 예상대로 작동하지 않는 이유는 무엇입니까? [복사]

다음과 같이 괄호 안에 변수(x=100)를 설정하고 싶습니다.

x=100    
for i in {0.."$x"..50} ;do
echo $i 
done

i 의 예상 출력은 다음과 같아야 합니다.

0
50
100

나는 출력을 얻지 만

{0..100..50}

답변1

이것은 bash.확장순서는bash변수 확장은 쉘이 중괄호를 확장하는 것보다 나중에 발생합니다 {0..50}. 따라서 중괄호 확장 중에 쉘은 해당 구성을 {0..$x..50}유효하지 않은 확장 구성으로 처리합니다.

대안이 필요합니다. 가장 좋은 것은 for산술 컨텍스트의 루프입니다.bash

for ((i=0; i<=100; i+=50)); do 
    printf "%d\n" "$i"
done

답변2

이 구문은 zsh(원본) 또는 ksh93 또는 에서 작동 하지만 yash -o braceexpand. 그러나 여기서는 어쨌든 ksh93 스타일 루프를 사용하는 것이 더 좋습니다 .bash{x..y}for ((...))

x=100    
for ((i = 0; i <= x; i += 50)) {
  printf '%s\n' "$i"
}

관련 정보