Talvez esta seja uma pergunta estúpida, mas duas horas no Google não resultaram em nada no ponto.
Simplesmente, existe uma diferença no Bash entre:
X="
a
b
c
"
e
X=(
a
b
c
)
O primeiro está de acordo com a definição de uma variável, o segundo, a definição de um array.
Um array é uma variável de vários elementos, então isso quer dizer que o primeiro também é um array para todos os propósitos?
Se o primeiro é um array, a única diferença na operação entre (a) as aspas duplas e (b) os parênteses, é a operação de citar regras nos elementos do array?
Muito obrigado por quaisquer insights.
Não, o primeiro não é uma matriz.
Por exemplo, você não pode usar um índice para selecionar um membro:
Você pode usar um array para passar argumentos, mas não pode usar uma string. Use elementos contendo espaços para maior efeito:
Resultado:
man bash
contém descrições de ambos os tipos de variáveis, sem necessidade de pesquisa no Google.Uma string de substrings delimitadas por nova linha não é a mesma coisa que um array de strings. Uma é uma string; o outro contém strings.
O fato de sua string ser dividida em linhas pela inclusão de caracteres de nova linha na string não tem significado particular para o armazenamento da string. O shell não pode indexá-lo em linhas, e uma única linha não pode conter um caractere de nova linha incorporado sem codificá-lo de alguma forma.
A matriz é um conjunto ordenado de strings separadas. Cada string é imediatamente acessível por meio de um índice no array. Um único elemento de matriz pode conter qualquer string padrão, com ou sem novas linhas ou outros caracteres delimitadores (exceto o caractere nulo no
bash
shell). No entanto, um elemento de array não pode ser outro array, poisbash
não suporta arrays multidimensionais.O fragmento de script acima imprime o primeiro verso do poema Jabberwocky de Lewis Carroll. Ele não é impresso
Hello World
quando escolhemos como saída o segundo elemento do array, não o primeiro. O segundo elemento é uma única string composta de caracteres. Alguns desses caracteres são novas linhas e espaços em branco, mas isso é feito apenas para fins de apresentação.Para produzir apenas uma única linha, ou qualquer outra substring, do poema no segundo elemento do array, precisamos usar algum utilitário para analisar a string. Extrair substrings individuais delimitadas por nova linha de uma string não tem nada a ver com o conceito de arrays no shell.