Shell-Script

如何將參數列表傳遞給函式

  • March 11, 2019

我想將參數從循環傳遞到函式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[@]}"

(使用數組比將值連接到字元串更好,因為它使帶有空格的值保持不變。)

引用自:https://unix.stackexchange.com/questions/505748