Eu tenho esta matriz:
PARAMETERS_OF_COMPONENTS[1]="component1"
PARAMETERS_OF_COMPONENTS[2]="component21 component22 component23"
PARAMETERS_OF_COMPONENTS[3]="component3"
PARAMETERS_OF_COMPONENTS[4]="component41 component42 component43"
Eu quero passar esse array para esta função:
foo()
{
local param1="$1"
local param2="$2"
local array_param="$3"
. . .
echo "${PARAMETERS_OF_COMPONENTS[@]}"
}
Quando passo um array desta maneira:
foo "$param1" "$param2" "${PARAMETER_OF_COMPONENTS[@]}"
então a função apenas imprime:
component1
Além disso, tentei alguns outros métodos para passar array, mas ainda não encontrei a solução certa.
Como posso passar array corretamente para funcionar? Além disso, a solução deve ser compatível com Dash (pelo menos sem bashisms).
UPD @Kusalananda me explicou que Dash não suporta arrays. Obrigado por esclarecer.
vou pedir outro. Como posso passar muitos parâmetros para uma função sem passar diretamente na maneira $1
, $2
... e não envolver variáveis globais? Tenho várias ideias, mas gostaria de ouvir as suas abordagens?
Minha tarefa é mover a função de um arquivo para outro, mas essa função usa variáveis globais. Eu não quero usar variáveis globais. Então, como fazer isso da maneira mais correta?
Em um
sh
shell que não suporta arrays e a palavra-local
chave, você ainda pode usar$@
como array na função. Você pode escolher os dois primeiros argumentos comshift 2
e, em seguida, usar o$@
que agora contém todo o restante dos argumentos.Coloque o corpo da função em
( ... )
vez de{ ... }
tornar todas as variáveis locais, se a função não precisar modificar variáveis globais e você não quiser poluir o namespace da variável com variáveis desnecessárias.Usando seus dados originais com
foo
declarados como acima:Em um shell que suporta arrays e
local
, você faria exatamente a mesma coisa (mas a função pode querer usar variáveis declaradas comolocal
), e a chamada pode serPara passar vários arrays em
bash
, eu usaria uma referência de nome na função (requerbash
versão 4.3 ou posterior):Observe que você não pode passar uma variável de array para a função que tenha o mesmo nome da variável de referência de nome correspondente na função (eu considero isso um bug, funciona em
ksh93
).