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.