如何循环遍历提供的参数?

如何循环遍历提供的参数?

我有以下代码:

function test() {
    for ft in "$1"; do
        echo $ft
    done
}

test 5

我正在尝试循环遍历数字 12,因此我希望 ft1,2,3,4,5分别位于每个循环中。但它只是打印 5。我也尝试过,{1..$1}但结果仍然相同。请帮忙!

答案1

我不太确定你在问什么。您想提供一个参数,然后循环从 1 到该值吗?如果是这样,您可以使用 bash (也可能使用其他 shell)来执行此操作:

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(...)语法的 shell,您可以使用以下命令执行相同的操作:

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)。

相关内容