Как передать функции столько аргументов, сколько имеется переменных, начинающихся со слова «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и grepдля любой строки, которая начинается с , VARIABLEза которой следуют любые символы и знак равенства, затем вы передадите их в , cutчтобы разделить имя и значение, и назначите все значения массиву ALL_VARIABLES, который затем будет расширен и передан в качестве аргументов вrandomfunction

решение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[@]}"

Связанный контент