Для вывода weird

Это мой сценарий:

#!/bin/bash E=0;j=0 for i in ABC do Erray=$(sed -n '/Local net energy/p' log | awk '{print $7}') A[j]=j echo $i = $Erray kJ/mol >> Energy let j=j+1 echo $j $i $Erray ${A[j]} done cat Energy 

Выход:

 1 A 2.692036739192E+03 2 B 2.679751695663E+03 3 C 4.732453844269E+03 A = 2.692036739192E+03 kJ/mol B = 2.679751695663E+03 kJ/mol C = 4.732453844269E+03 kJ/mol 

Это не должно быть так. Порядок вывода «сортируется», а ${A[j]} не появляется.

Редактировать Теперь я знаю, почему вывод сортируется. Я забыл добавить >> Energy после второго echo . Проблема с массивом все еще сохраняется. Мои входные данные большие, я только извлекаю строки, которые имеют значение.

 print energy 2 - 1 end Local net energy (PE 0) = 2.692036739192E+03 kJ/mol Global net ELEC energy = 2.692036739192E+03 kJ/mol 

В вашем скрипте j монотонно увеличивается – он начинается с 0 и подсчитывается по одному на итерацию цикла. Вы присваиваете значение A[j] в своем цикле, затем вы увеличиваете j , затем пытаетесь распечатать A[j] – но теперь, когда j был увеличен, этот индекс в A еще не установлен, поэтому есть ничего не печатать (расширение переменной пусто). Если вы печатали ${A[j-1]} вы должны видеть вывод.