我想将参数从循环传递到函数中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[@]}"
(使用数组比将值连接到字符串更好,因为它可以保持带有空格的值完好无损。)