다음 코드가 있습니다.
function test() {
for ft in "$1"; do
echo $ft
done
}
test 5
저는 숫자 12를 반복하려고 하므로 ft가 1,2,3,4,5
각 루프에 개별적으로 포함되기를 원합니다. 하지만 5만 인쇄됩니다. 저도 시도해 보았지만 {1..$1}
여전히 같은 결과입니다. 도와주세요!
답변1
당신이 무엇을 요구하는지 잘 모르겠습니다. 매개변수를 제공한 다음 1부터 해당 값까지 반복하시겠습니까? 그렇다면 bash(및 다른 쉘)를 사용하여 이를 수행할 수 있습니다.
function test() {
for ((i = 1; i <= $1; ++i)); do
echo $i
done
}
test 12
1
2
3
4
5
6
7
8
9
10
11
12
이 구문을 지원하는 셸이 없으면 for(...)
다음 명령을 사용하여 동일한 작업을 수행할 수 있습니다.
function test() {
i=1
while [ $i -le $1 ]; do
echo $i
i=$(expr $i + 1)
done
}
답변2
이 문제는 두 가지 방법으로 해결할 수 있습니다.
함수에 정수를 제공하고 시작 값(1)과 해당 정수 사이의 정수를 출력하도록 합니다.
count_up () { seq "$1"; }
또는
count_up () { for (( i = 1; i <= $1; ++i )); do echo "$i" done }
또는
count_up () { value=1 while [ "$value" -le "$1" ]; do echo "$value" done }
또는 다른 변형 수.
eg를 사용하여 실제 정수를 함수에 대한 인수로 취하고
count_up {1..5}
간단히 함수를 다음과 같이 정의합니다.count_up () { printf '%s\n' "$@"; }
또는
count_up () { for value do echo "$value" done }
seq 5
하지만 이는 직접 호출 하거나 사용할 수 있기 때문에 별로 의미가 없습니다printf '%s\n' {1..5}
(또한 함수는 아마도 이와 같이 호출되어야 합니다list_args
).