Como passar tantos argumentos para uma função quanto as variáveis que começam com “string”?

2

Tudo está no título.

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 forma diferente:

Como faço:

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

sendo produzido como:

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

    
por lapin 28.10.2016 / 06:04

2 respostas

2

Se você executar o comando set sem nenhum argumento, ele exibirá 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 filtrar a "cadeia" quer dessas variáveis, atribua isso a um array e então 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 set e grep para qualquer linha que comece com VARIABLE seguida por qualquer caractere e um sinal de igual, então passará para cut para separar nome e valor e atribua todos os valores à matriz ALL_VARIABLES , que será expandida e transmitida como argumentos para randomfunction

    
por 28.10.2016 / 07:14
0

você pode usar o 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[@]}"
    
por 28.10.2016 / 06:14