¿Cómo pasar tantos argumentos a una función como variables que comiencen con "cadena"?

¿Cómo pasar tantos argumentos a una función como variables que comiencen con "cadena"?

Ejemplo :

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"

EDITAR

Como hay algún malentendido, déjame decirlo de otra manera:

¿Cómo hago?

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

siendo generado como:

"foo bar job"sin saber el número de VAR, tal vez también exista VAR4, tal vez VAR5, etc.

Respuesta1

Si ejecuta el setcomando sin ningún argumento, generará todas las variables y funciones que se configuraron para la sesión, con eso en mente es solo cuestión de filtrar las variables y luego filtrar la "cadena" que desea de esas variables, asignar eso a una matriz y luego pasar la matriz a la función.

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

Básicamente, obtendrá toda la salida de sety greppara cualquier línea que comience con VARIABLEseguida de cualquier carácter y un signo igual, luego la pasará para cutseparar el nombre y el valor, y asignará todos los valores a la ALL_VARIABLESmatriz, que luego se expandirá. y pasado como argumentos arandomfunction

Respuesta2

puedes usar una matriz y pasar la matriz para que funcione.

#!/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[@]}"

información relacionada