如何将参数列表传递给函数

如何将参数列表传递给函数

我想将参数从循环传递到函数中func。为了简单起见,假设我们正在使用循环

for x in {1..5}
do
    for y in {a..c}
    do
    echo $x$y
    done
done

我只是附和,因为我不知道该怎么办。我想运行相当于func 1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c.

我该怎么做呢?

答案1

func {1..5}将相当于func 1 2 3 4 5.

一般来说,a 中的单词列表为了语句就像命令中的任何单词列表一样,因此您只需调用该命令即可替换循环,并将您使用的任何列表移至命令参数。

另外,您可以一起使用多个大括号扩展:{1..5}{a..c}将创建列表1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c(作为不同的单词),所以在您显示的情况下,func {1..5}{a..c}应该可以工作。


如果您的循环执行更复杂的操作来创建最终命令的参数,您可以使用数组来收集它们(在 Bash/ksh/zsh 中)。假设我们generate_arg必须运行它来生成以下参数func

args=()
for i in {1..5}; do
    args+=( "$(generate_arg "$i")" )
done
func "${args[@]}"

(使用数组比将值连接到字符串更好,因为它可以保持带有空格的值完好无损。)

相关内容