제공된 매개변수를 어떻게 반복할 수 있나요?

제공된 매개변수를 어떻게 반복할 수 있나요?

다음 코드가 있습니다.

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. 함수에 정수를 제공하고 시작 값(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
    }
    

    또는 다른 변형 수.

  2. 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).

관련 정보