다음과 같이 괄호 안에 변수(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"
}