Wie übergebe ich einer Funktion so viele Argumente, wie es Variablen gibt, die mit „String“ beginnen?

Wie übergebe ich einer Funktion so viele Argumente, wie es Variablen gibt, die mit „String“ beginnen?

Beispiel :

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"

BEARBEITEN

Da hier ein Missverständnis besteht, möchte ich es anders ausdrücken:

Wie mache ich:

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

wird wie folgt ausgegeben:

"foo bar job"ohne die Nummer des VAR zu kennen, vielleicht gibt es auch VAR4, vielleicht VAR5 usw.

Antwort1

Wenn Sie den setBefehl ohne Argumente ausführen, werden alle Variablen und Funktionen ausgegeben, die für die Sitzung festgelegt wurden. Dabei müssen Sie lediglich die Variablen filtern und dann aus diesen Variablen die gewünschte „Zeichenfolge“ herausfiltern, diese einem Array zuweisen und das Array dann an die Funktion übergeben.

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

grundsätzlich erhalten Sie die gesamte Ausgabe von setund grepfür jede Zeile, die mit beginnt, VARIABLEgefolgt von beliebigen Zeichen und einem Gleichheitszeichen, dann übergeben Sie sie an, cutum Name und Wert zu trennen, und weisen alle Werte dem ALL_VARIABLESArray zu, das dann erweitert und als Argumente an übergeben wirdrandomfunction

Antwort2

Sie können ein Array verwenden und das Array an die Funktion übergeben.

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

verwandte Informationen