如何向函數傳遞與以“string”開頭的變數一樣多的參數?

如何向函數傳遞與以“string”開頭的變數一樣多的參數?

例 :

VARIABLE1="/foo/bar"
VARIABLE2="/some/other/path"
# etc you don't know how many variables there is, maybe 3 maybe 30.
# Then :
randomfunction $VARIABLE1 $VARIABLE2 #... <- How do I replace this to something that would include every variable starting with name "VARIABLE"

編輯

由於存在一些誤解,讓我換個說法:

我該如何製作:

VAR1="foo"
VAR2="bar"
VAR3="job"

輸出為:

"foo bar job"在不知道VAR數量的情況下,也許還有VAR4,也許還有VAR5等。

答案1

如果您運行set不帶任何參數的命令,它將輸出為會話設定的所有變數和函數,考慮到這一點,只需過濾變量,然後從這些變數中過濾您想要的“字串”,分配到一個數組,然後將數組傳遞給函數。

ALL_VARIABLES=( $(set | grep -Ea '^VARIABLE.*=' | cut -d = -f 2) )
randomfunction "${ALL_VARIABLES[@]}"

基本上,您將獲得以任何字元和等號開頭的任何行的set所有輸出,然後將其傳遞給單獨的名稱和值,並將所有值分配給數組,然後該數組將擴展並作為參數傳遞給grepVARIABLEcutALL_VARIABLESrandomfunction

答案2

您可以使用數組並將數組傳遞給函數。

#!/bin/bash

Variable=(/tmp /tmp/a.txt /tmp/b.txt)

function Test(){
Values=("$@")
echo "${Values[0]}"
echo "${Values[1]}"
echo "${Values[2]}"
}


echo "${Variable[0]}"
echo "${Variable[1]}"
echo "${Variable[2]}"
echo "${Variable[@]}"

#Call the Test function and pass the array
Test "${Variable[@]}"

相關內容