bash 带有传递参数的函数中的循环

bash for loop in function with passing parameters

我是 bash 的新手,找不到任何合适的答案,希望你们能帮助我。对不起,如果我的问题的答案太明显了。

我想创建一个参数数量可变的函数,它应该用 for 循环打印出来。 传递的参数是可打印的字符串。输出应该是 "for loop" 的数字,以 1 开头,然后是传递的参数。我找不到解决方案说:打印迭代次数,然后在迭代位置打印函数参数。

我总是得到错误:无效号码

请原谅我的困惑。谢谢

它应该是这样的

SOME TEXT

1: String1
2: String2
3: String3
func()  {
 echo -e "SOME TEXT"

        for i in "$@"; do
            printf  '%d: %s\n' "$i" "$@"   # I also tried "${i[@]}"
        done

}

func String1 String2 String3


在您的代码中,$i 将是传递给函数的每个参数。无法根据 printf 将其转换为数字,因此它会抱怨。 那是因为 $@ 是传递给函数的所有参数的列表。在您的例子中,$@ 包含元素 String1String2String3

这就是你的意思:

func(){
    echo -e "SOME TEXT"
    i=0
    for arg in "$@"; do
        i=$((i+1))
        printf '%d: %s\n' "$i" "$arg"
    done
}
func String1 String2 String3
func() {
    echo -e "SOME TEXT"
    for ((i=1; i<=$#; i++)); do
        eval str=$$i
        printf '%d: %s %s\n' "$i" "$str" "${!i}"
    done
}

使用间接引用访问变量。 str 是旧方法,${!i} 是新方法 shorthand。