![변수를 사용한 중괄호 확장이 예상대로 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/166727/%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EC%A4%91%EA%B4%84%ED%98%B8%20%ED%99%95%EC%9E%A5%EC%9D%B4%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
다음과 같이 괄호 안에 변수(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"
}