Array dentro de um Array: Sintaxe diferente para Array no bash

0

Eu encontrei o seguinte exemplo de aqui . Mas não consigo entender como o array arr está sendo definido.

a='domain.de;de;https'
$ arr=(${a//;/ })

Qual é a vantagem de defini-lo assim?

Na verdade, quero armazenar uma matriz dentro de uma matriz de tamanho variável, como segue:

declare -a Workspace=(
    "${Folder[0]}"  "CFD"   "General,Markdown"
    "${Folder[4]}"  "GPU"   "General,Markdown,Python,C,Java"
)

Por exemplo, acima, quero acessar os termos General e Markdown para CFD .

    
por Nikhil 22.11.2018 / 01:19

1 resposta

1

Uma matriz de matrizes é uma má idéia no shell (qualquer shell). Você precisa de algum outro idioma.

how is array arr being defined.?

a='domain.de;de;https'
arr=(${a//;/ })

Funciona por:

  • substituindo cada ; por space
  • Assumindo que o IFS é espaço, tabulação, nova linha (o padrão)
  • divisão no espaço (incluída no IFS), a expansão sem aspas de ${...}
  • atribuindo-o a uma matriz (...)
  • e nomeando essa matriz arr= .

What is the advantage of defining it like this?

Nenhum, apenas problemas:

  • Se qualquer um dos elementos contiver um espaço, uma guia ou uma nova linha, ele será dividido.
  • Como a globbing não foi desativada, qualquer * , ? ou [ ] será expandido para arquivos correspondentes.
  • Se o nullglob estiver ativo, qualquer string contendo * , ? ou [ ] será removida.
  • se o failglob estiver ativo, qualquer um dos caracteres anteriores gerará um erro.

Em suma, a divisão no shell está cheia de dicas.

    
por 22.11.2018 / 01:44