Estou escrevendo uma função que fará chamadas de API REST que podem ser GET
, PUT
, DELETE
, POST
, etc.
Eu gostaria de alimentar esse método para a função como um parâmetro e adicioná-lo ao array de opções para essa única chamada de função. Isso é possível?
Atualmente estou resolvendo isso criando uma local
matriz separada, mas preferiria usar apenas a options
matriz única.
#!/bin/bash
options=(
--user me:some-token
-H "Accept: application/json"
)
some_func () {
local urn=$1
shift
local func_opts=("${options[@]}" "$@")
printf '%s\n' "${func_opts[@]}"
}
# This should return all options including -X GET
some_func /test -X GET
# This should return only the original options
printf '%s\n' "${options[@]}"
Eu também poderia usar um array temporário para armazenar o conteúdo de options
, adicionar as novas opções e redefini-lo antes que a função termine, mas também não acho que seja um método particularmente limpo.
Com bash 5.0 e superior, você pode usar a
localvar_inherit
opção que faz com quelocal
se comporte como em shells baseados em ash, que é ondelocal var
torna a variável local sem alterar seu valor ou atributos:Com qualquer versão, você também pode fazer:
Uma opção seria usar explicitamente um subshell para a função e, em seguida, substituir sua cópia local do array, sabendo que, uma vez que o subshell saia, a variável original não será alterada: