在函数中使用传递参数的bash for循环

问题描述 投票:0回答:1

我是新来的,找不到合适的答案,希望你们能帮助我。对不起,如果我的问题的答案太明显了,我想创建一个参数数量可变的函数,应该用for循环打印出来。

我想创建一个参数数量可变的函数,它应该用for循环打印出来,传递的参数是可打印的字符串。输出应该是 "for循环 "的数字,从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


bash function loops parameters format-specifiers
1个回答
3
投票

在你的代码中。$i 将是传递给函数的每个参数。这不能被转换为一个数字,根据 printf所以它抱怨.那是因为 $@ 是传递给函数的所有参数的列表。在你的例子中 $@ 包含的元素 String1, String2String3.

这就是你的意思。

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

0
投票
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} 是一种较新的速记方法。

© www.soinside.com 2019 - 2024. All rights reserved.