我正在进行一些代码优化工作,想要检查我的函数的大小,而不是读取巨大的反汇编文件。在 Debug 编译后,我使用 nm 命令来读取 .o 文件,我们得到了以下结果:
nm --size-sort $OBJFILEPATH.o
000000000000000b r __PRETTY_FUNCTION__.6473
0000000000000017 t extract_h
0000000000000036 t L_mult
000000000000003a t sature32
0000000000000042 t L_mac
0000000000000048 t L_add
000000000000005c t Mac16x11
0000000000000077 t L_shl
0000000000000083 t L_shr
00000000000000df T G729Convolve
0000000000000114 T G729Residu
00000000000001bc T G729Syn_filt_L_H
00000000000001bc T G729Syn_filt_L_SUBFR
现在,我想要在Bash脚本中解析每一行的第一列,而每一行代表了Bash中的一个数组元素。
我的命令是:
read FUNCSIZE <<< $(nm --size-sort $OBJFILEPATH.o | awk '{print $1}')
为了确保一切正常,我检查了我的FUNCSIZE数组的大小。
SIZE=${#FUNCSIZE[@]}
echo size is $SIZE
for s in $FUNCSIZE
do
echo $s
done
我得到了这个输出结果:
size is 1
000000000000000b
0000000000000017
0000000000000036
000000000000003a
0000000000000042
0000000000000048
000000000000005c
0000000000000077
0000000000000083
00000000000000df
0000000000000114
00000000000001bc
00000000000001bc
为什么大小是'1',而且我可以像在数组中一样打印每个元素。看起来输出仍然在行末有一个空格' '。是否有任何RegEx与awk一起使用,可以避免将分隔符字段包含到数组中?
感谢您的帮助!
答案后编辑
read -a FUNCSIZE <<< $(nm --size-sort $OBJFILEPATH.o | awk '{print $1}')
SIZE=${#FUNCSIZE[*]}
for((i=0; i<SIZE; i++))
do
echo ${FUNCSIZE[$i]}
done
read -a
。无论如何,创建一个bash数组可能不是你接下来要做的正确起点。如果你能用简明、可测试的例子告诉我们你要做什么,我们可以帮助你。 - Ed Morton