在 for 循环内的终端中将数组传递给函数参数

在 for 循环内的终端中将数组传递给函数参数

我有以下代码:

myfunc(){
    group=("$1")

    for i in "${group[@]}"
        do
            printf "%s\n" "$i"
        done
}

我用它来打印group数组中的每个项目。此数组应该是终端中的一个参数。但是当我尝试在文件内的终端中使用它时,.bash_profile它不起作用。我通过运行以下命令尝试此操作:

myfunc ("one" "two" "three")

答案1

您似乎期望 shell 生成某种匿名数组变量 - 据我所知,这是不可能的bash

简单的方法是传递单独的参数(如果正确引用,可能包含空格),然后使用"$@"

myfunc ()
{
    group=("$@");
    for i in "${group[@]}"
    do
        printf "%s\n" "$i"
    done
}

那么例如

$ myfunc "one nine" "two" "three four five"
one nine
two
three four five

虽然在这种特殊情况下我没有看到附加数组变量的任何好处 - 但您也可以"$@"直接循环:

myfunc ()
{
    for i in "$@"
    do
        printf "%s\n" "$i"
    done
}

如果你只是希望它在调用上下文中“看起来像一个数组”,那么我能想到的唯一方法就是将它作为细绳例如,myfunc '("one nine" "two" "three four five")'然后eval你的函数内部的分配eval group="$1",但我确实不是建议这样做。

相关内容