Como criar uma função de bash que retorne uma matriz

Como criar uma função de bash que retorne uma matriz
Pode parecer à primeira vista que devolver uma matriz de uma função Bash não é realista. Considerando todos os benefícios, pode ser útil chamar vários métodos para construir matrizes para dividir o processo de coleta de todos os parâmetros apropriados para uma chamada YAD.

Há muitas razões pelas quais alguém pode querer restaurar uma matriz de bash:

  • Gerenciar a vida útil das matrizes é mais simples porque eles são atribuídos localmente.
  • Para a realização just-in-time, a obtenção de matrizes de métodos pode ajudar.
  • Para suportar técnicas de algoritmo de log, os nomes dos métodos que retornam matrizes podem ser eliminados.

Você pode acreditar que Bash perde a capacidade de retornar matrizes de funções. No entanto, isso não está exatamente correto. É possível mover a matriz resultante para um método por referência, obtendo dicas de desenvolvedores de C/C ++. Essa estratégia permite que o método continue livre de referências a uma variável global. O artigo a seguir mostra instâncias claras deste caso.

Exemplo 1: retornando uma matriz

Faça login no seu sistema Linux e abra o terminal de comando para prosseguir. Vamos criar um arquivo bash chamado “script.sh ”usando o tocar comando para retornar a matriz usando a função Bash. O script é o seguinte:

$ toque script.sh

Você pode ver o arquivo recém -criado no Lar diretório. Abra este arquivo e anote o código anexado nele como está. Aqui, estamos tentando criar uma matriz associativa através de um argumento em um método de um passe de lista.

Inicialmente, criamos a função foo ().

Dentro deste programa, removemos o termo "declarar", que é um comando pré-configurado de bash que nos permite alterar ou personalizar os atributos, os métodos da concha manchados para as variáveis ​​e demonstramos os valores desses atributos dentro do extensão do nosso terminal de comando da Shell. Além disso, pode ser usado para definir uma variável longa. Por fim, é usado para definir as variáveis.

Adicionamos o valor "Fooval" à matriz "arr".

A palavra-chave "-a" é usada para criar o Nomes matriz associativa se suportado. Devemos usar a lista/matriz como uma variável global, o que implica que apenas um método, não um script, pode executar esta ação.

Também criamos outra matriz, chamada "Myarr", para uso como referência. Bash permite que o nome de uma variável relativa arr seja diferente do nome da variável relativa Myarr.

Depois disso, na oitava linha, passamos a matriz "Myarr" para a festa foo () função como uma referência.

No passado, usamos o loop "para" para imprimir as matrizes "arr" e "myarr" para o foo () função.

Agora vamos verificar o resultado deste código. Execute o comando bash para executar o código acima. Você pode ver que a matriz foi devolvida à função e depois impressa.

$ script.sh

Exemplo 2: retornando outra matriz

Vejamos outro exemplo de retorno de matrizes para uma função. Abra seu terminal de comando e crie um novo arquivo chamado “OpenVPN.log ”usando o tocar comando, como segue:

$ touch OpenVPN.registro

Agora, abra o “OpenVPN.Log ”arquivo e escreva o seguinte texto neste arquivo, como mostrado. Salve este arquivo e feche -o.

Novamente, abra o shell de comando e crie outro arquivo chamado “Script.sh, "usando o tocar comando para adicionar o script bash ao arquivo.

$ toque script.sh

Em seguida, abra o “script.Arquivo SH ”e anexa o seguinte código neste arquivo AS-IS. Salvar e fechar este arquivo. Este script usará um método que lê valores/strings de um documento e retornará uma matriz:

  • Declarando a matriz: clientes
  • Alocar a matriz devolvida do método para combinar clientes
  • Mostrar Array: Clientes

Vamos agora dar uma olhada detalhada no funcionamento deste script.

  • Declaramos uma variedade global de "clientes" usando a palavra-chave "declarar", seguida por "-a.”
  • O readArray () A função foi definida. Nesta função, declaramos algumas variáveis ​​locais. A variável local "Array" está vazia, mas "i" e "j" foram definidos com o valor 0 a ser usado como iteradores.
  • Usando o modo de leitura, leremos o texto do arquivo usando iteradores para incrementar os índices.
  • A linha “clientes [$ ((i ++)]]+= $ line;” é usado para anexar as linhas de texto à variável de matriz de “clientes” definida globalmente.
  • Depois disso, "J ++" está pulando no próximo índice.
  • A variável "$ 1" é usada para salvar e devolver a matriz que acabou de ser criada a partir do "OpenVPN.arquivo de texto de log ”.
  • Do lado de fora da função, a string foi declarada como "$ string" e recebeu um caminho de arquivo como um valor.
  • Esta string foi passada para o ReadArray função como uma referência para ler o texto deste arquivo.
  • Depois disso, a matriz de "clientes" foi impressa e todo o texto dentro dela foi exibido em uma linha.
  • Agora, exibiremos uma mensagem de que a matriz não está mais vazia.
  • O loop "for" foi usado para converter o conteúdo da matriz de "clientes" no tipo de matriz e declarar um índice para o conteúdo usando a instrução “Echo“ $ i: $ clientes [$ i].”
  • Finalmente, exibimos uma mensagem e imprimimos alguns valores de matriz convertidos separadamente como uma única posição indexada de uma matriz.

Vamos agora verificar a saída deste script Bash. Execute o comando bash para executar o “script.arquivo sh ”. Como você pode ver, a primeira declaração de eco imprimirá todo o texto do “OpenVPN.arquivo de log ", que foi salvo na matriz" clientes "como uma linha. A segunda declaração de eco exibirá a mensagem da string. A terceira declaração de eco exibirá a matriz de "clientes" em forma indexada, pois acabou de ser convertida. O quarto vai exibir uma mensagem novamente. O último exibirá o conteúdo da matriz de "clientes" individualmente.

Conclusão

Este artigo mostrou como retornar matrizes (especialmente matrizes associativas) a uma função usando o comando "declarar" com dois exemplos. Espero que este artigo tenha ajudado você a entender melhor este tópico.