Shell-Script
如何將參數列表傳遞給函式
我想將參數從循環傳遞到函式
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
.我該怎麼做呢?
func {1..5}
將等同於func 1 2 3 4 5
。一般而言,for語句中的單詞列表就像命令中的任何單詞列表一樣,因此您可以將循環替換為命令的單個呼叫,將您在其中使用的任何列表移至命令參數。
此外,您可以一起使用多個大括號擴展:
{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[@]}"
(使用數組比將值連接到字元串更好,因為它使帶有空格的值保持不變。)