提供されたパラメータをどのように繰り返すことができますか?

提供されたパラメータをどのように繰り返すことができますか?

次のコードがあります。

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

この問題は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)。

関連情報