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 set
Befehl 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 set
und grep
für jede Zeile, die mit beginnt, VARIABLE
gefolgt von beliebigen Zeichen und einem Gleichheitszeichen, dann übergeben Sie sie an, cut
um Name und Wert zu trennen, und weisen alle Werte dem ALL_VARIABLES
Array 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[@]}"