- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
Provavelmente você já deve ter lido sobre array, suas estruturas de dados e as vantagens na sua utilização. Em linguagens de programação orientada a objetos, quando um array é instanciado, o objeto 'array' recebe recursos extras que chamamos de métodos que auxiliam o programador durante a manipulação dos dados armazenados. Em especifico vou mencionar sobre o método append, que tem como finalidade anexar um elemento ao último índice do array (fim da fila).
O exemplo que veremos a seguir é aplicado somente em um array indexado, onde os elementos são referenciados por sua posição (inteiro positivo).
Para começar vou criar uma função que vou chamar de append (sugestivo) e conterá dois parâmetros com a seguinte sintaxe:
Parâmetros posicionais:
Segue abaixo a estrutura da função.
Nota: Em shell toda variável é um array desde que um valor seja associado a um índice.
Agora vamos chamar a função e passar os parâmetros. Lembre-se que a variável precisa ser declarada antes (apenas um particularidade da função criada).
Note que os elementos foram devidamente anexados ao array passado na função, Por que? Ao declarar a variável 'byref' utilizando o comando 'declare -n byref=$1', cria-se um ponteiro e associa-se o nome do array armazenado em '$1', ou seja, toda alteração aplicada em byref na verdade está sendo realizada na variável original.
Também é possível anexar o elemento utilizando somente a linha de comando:
Se a linha acima funciona, porque criar uma função?
Lembre-se o objetivo é explorar as possibilidades e demonstrar o poder do shell no desenvolvimento de soluções.
Veja também: Expansão de arrays
O exemplo que veremos a seguir é aplicado somente em um array indexado, onde os elementos são referenciados por sua posição (inteiro positivo).
Para começar vou criar uma função que vou chamar de append (sugestivo) e conterá dois parâmetros com a seguinte sintaxe:
append [variável] [valor]
Parâmetros posicionais:
Função | $1 | $2 |
---|---|---|
append | variável | valor |
- Variável é o identificador (nome) do array instanciado.
- Valor é qualquer expressão que será anexada ao array. Para expressões compostas é necessário utilizar aspas simples (') ou duplas ("). Exemplo: 'expressao'.
Segue abaixo a estrutura da função.
#!/bin/bash
append()
{
# Variável local
local val
# Testa se a variável informada foi instanciada.
if ! declare -p $1 &>/dev/null; then
echo "$FUNCNAME: erro: '$1' variável não instanciada ou inválida." 1>&2
return 1 # Erro
fi
# Salva o valor em 'val', se 'val' for nulo, imprime mensagem
# de erro e sai da função.
val=${2:?$FUNCNAME: valor é obrigatório.} 1>&2
# Cria um ponteiro que fará referẽncia ao nome da variável original contida em '$1'
declare -n byref=$1
# Anexa elemento se já houver elementos salvos no array, caso contrário
# salva no índice 0.
[ "$byref" ] && byref+=("$val") || byref[0]="$val"
# Remove o atributo de ponteiro e limpa a variável 'byref'.
declare +n byref; unset byref
# Sucesso
return 0
}
Agora vamos chamar a função e passar os parâmetros. Lembre-se que a variável precisa ser declarada antes (apenas um particularidade da função criada).
# Inicializando a variável.
cores=""
# Anexando os elementos no array
append cores 'azul claro'
append cores 'verde claro'
# Imprimindo todos os elementos
printf '%s\n' "${cores[@]}"
azul claro
verde claro
# Anexando mais um elemento
append cores 'vermelho'
# Imprimindo novamente todos os elementos
printf '%s\n' "${cores[@]}"
azul claro
verde claro
vermelho
Note que os elementos foram devidamente anexados ao array passado na função, Por que? Ao declarar a variável 'byref' utilizando o comando 'declare -n byref=$1', cria-se um ponteiro e associa-se o nome do array armazenado em '$1', ou seja, toda alteração aplicada em byref na verdade está sendo realizada na variável original.
Também é possível anexar o elemento utilizando somente a linha de comando:
nome_array+=('valor')
Se a linha acima funciona, porque criar uma função?
Lembre-se o objetivo é explorar as possibilidades e demonstrar o poder do shell no desenvolvimento de soluções.
Veja também: Expansão de arrays
Comentários
Amigo
ResponderExcluirExiste a possibilidade de fazer que as mensagens que chegue em um bot seja encaminhada para um grupo?
Somente se o bot for membro do grupo ao qual você deseja enviar a mensagem.
Excluir