Como passar tantos argumentos para uma função quanto variáveis ​​começando com "string"?

Como passar tantos argumentos para uma função quanto variáveis ​​começando com "string"?

Exemplo :

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 há algum mal-entendido, deixe-me dizer de outra forma:

Como faço:

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

sendo gerado como:

"foo bar job"sem saber o número do VAR, talvez haja também o VAR4, talvez o VAR5 etc.

Responder1

Se você executar o setcomando sem nenhum argumento, ele irá gerar todas as variáveis ​​e funções que foram definidas para a sessão, com isso em mente é apenas uma questão de filtrar as variáveis ​​e depois filtrar a "string" desejada dessas variáveis, atribuir isso para um array e depois passe o array para a função.

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

basicamente você obterá toda a saída de sete greppara qualquer linha que comece com VARIABLEseguida por quaisquer caracteres e um sinal de igual, então você passará para cutseparar nome e valor, e atribuirá todos os valores ao ALL_VARIABLESarray, que então será expandido e passado como argumentos pararandomfunction

Responder2

você pode usar array e passar o array para funcionar.

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

informação relacionada