1부터 100까지의 숫자 목록을 인쇄하고 싶습니다. 다음과 같은 for 루프를 사용합니다.
number=100
for num in {1..$number}
do
echo $num
done
명령을 실행하면 1부터 100까지의 숫자 목록 대신 {1..100}만 인쇄됩니다.
답변1
예, 중괄호 확장이 매개변수 확장 전에 발생하기 때문입니다. zsh
or 와 같은 다른 쉘을 사용 ksh93
하거나 대체 구문을 사용하십시오.
표준(POSIX) sh 구문
i=1
while [ "$i" -le "$number" ]; do
echo "$i"
i=$(($i + 1))
done
Ksh 스타일for ((...))
for ((i=1;i<=number;i++)); do
echo "$i"
done
사용 eval
(권장하지 않음)
eval '
for i in {1..'"$number"'}; do
echo "$i"
done
'
seq
사용 가능한 시스템에서 GNU 명령 사용
unset -v IFS # restore IFS to default
for i in $(seq "$number"); do
echo "$i"
done
(이 명령은 새 명령을 분기하고 실행하며 쉘이 파이프에서 출력을 읽어야 하기 때문에 효율성이 떨어집니다.)
셸에서 루프를 피하세요.
쉘 스크립트에서 루프를 사용하는 것은 일반적으로 루프를 올바르게 수행하지 않음을 나타냅니다.
대부분의 경우 코드를 다른 방식으로 작성할 수 있습니다.
답변2
for 루프도 필요하지 않습니다 seq
. 다음을 사용하세요.
$ seq 100
예
인쇄된 처음 10개의 숫자는 다음과 같습니다.
$ seq 100 | head -10
1
2
3
4
5
6
7
8
9
10
답변3
다음을 사용할 수 있습니다.
for (( num=1; num <= 100; num++ ))
do
echo $num
done
답변4
중괄호 확장은 리터럴 정수 또는 단일 문자에서만 작동합니다. 변수가 확장되기 전에 발생하므로 변수 내에서 사용할 수 없습니다.