Por que o bash não está reconhecendo meu caractere de nova linha?

0
Estou tentando obter um script para reverter a ordem das entradas (sim, eu sei que o comando "tac" já faz isso). O meu script é o seguinte: A linha F de impressão que imprime o valor da matriz e é seguida por uma nova linha, não vai imprimir minha nova linha, e é muito chato.

Eu tentei separá-lo e ter printf "\ n" na linha imediatamente após a linha para imprimir o valor do índice da matriz, mas isso também não parece estar funcionando.

#!/bin/bash

a=()
while read line; do
    a+="$line"
done

for ((i = 0 ; i <= ${#a[@]} ; i++)); do
    printf "${a[$i]}\n"
done
    
por Anyon 17.04.2017 / 17:25

1 resposta

0

O problema não é sua declaração printf , mas sua tarefa durante a leitura - você está misturando a sintaxe de anexando a matriz com atribuindo o valor de um elemento . Para acrescentar ao array, você precisa usar a+=("$line") . Se você quiser usar a sintaxe sem parênteses, precisará especificar o índice do elemento que deseja alterar, por exemplo a[5]="$line" .

Você pode encontrar mais exemplos sobre matrizes, por exemplo, em este link da documentação do Stackovewflow (marque a seção "Modificação de matriz" ") .

Observe também que o seu script não está imprimindo as linhas na ordem inversa. Para fazer isso, você precisa inverter o ciclo for para iterar do final da matriz até o começo.

    
por 21.04.2017 / 14:47