对于输出怪异

对于输出怪异

这是我的脚本:

#!/bin/bash
E=0;j=0
for i in A B C
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

答案1

在您的脚本中,j是单调递增的 - 它从 0 开始,每次循环迭代加一。您A[j]在循环中分配一个值,然后递增j,然后尝试打印出来A[j]- 但现在j已经递增,索引A尚未设置,因此没有任何内容可打印(变量扩展为空)。如果您正在打印${A[j-1]},您应该会看到输出。

相关内容