如何向函数传递与以“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[@]}"

相关内容