[问题] 变量中有变量作判断该如何作? (eval)

楼主: apolog (霜降小P)   2017-08-25 18:38:18
小弟在写测试script时, 在使用eval上遇到了一些问题, 想请教:
因为Cmp${Num}_F代入的数值是小数, 所以又增加了bc来辅助, Code如下:
需求是判断Cmp${Num}_F是否介于LOWER与UPPER之间,
但是在变量$Cmp${Num}_F放到if里面的时候出了错误, 请问我该怎么在if里面使用这类型的变量?
##COMPARISON
Amount=5
UPPER=1234.567
LOWER=12.3456
for ((Num=1 ; Num<Amount; Num++))
do
eval Cmp${Num}_F=$(cat xxx.log |grep Cmp${Num}_F |awk 'print $2')
done
for (( Num=1 ; Num<$Amount ; Num++ ))
do
if [ `echo "`$Cmp${Num}_F` > $UPPER"|bc` -eq 1 ] || [ `echo "`$Cmp${Num}_F` < $LOWER"|bc` -eq 1 ]; then
echo " Data in Range `eval echo '$'Cmp${Num}_F` Front: ($LOWER ~ $UPPER) "
else
echo " Data Not in Range"
fi
done
作者: Bellkna (柔弱气质伪少女)   2017-08-25 18:47:00
变量用双引号包起来 外层用单引号 ``改用$() 这样试试?
作者: OSDBNetwork (路人甲)   2017-08-25 20:04:00
看不懂问题,用猜的. https://pastebin.com/5UHVFu7Z
作者: sppmg (sppmg)   2017-08-25 20:15:00
随便看,但 > 在test []中应该要用-lt。然后是在单行多次用``时,一律用$()取代
楼主: apolog (霜降小P)   2017-08-25 23:21:00
请问B大的意思是if [`echo "$(Cmp${Num}_F)"|bc` -eq 1]这样吗?这样改的话会出现 Cmp1_F: command not found(standard_in) 1: syntax_error另外, OSD大的例子是变量$Num, 好像变成复合式变量用法上会变得不太一样 , Cmp${Num}_F 是先前用eval宣告给值
作者: OSDBNetwork (路人甲)   2017-08-25 23:47:00
请问你加上 Cmp 和 _F 是做什么用途? 不懂你的问题..
楼主: apolog (霜降小P)   2017-08-25 23:50:00
因为我希望变量是像 Cmp1_F Cmp2_F Cmp3_F....这样下去的每一次循环Cmp${Num}_F变量代进来的小数值都会不同
作者: OSDBNetwork (路人甲)   2017-08-25 23:53:00
可是你没 宣告 这些变量阿 : Cmp1_F Cmp2_F Cmp3_F
楼主: apolog (霜降小P)   2017-08-25 23:54:00
其实实际上的变量是更烦人的 Cmp_raw${ID}_col${Num}_F哈...的确 因为我觉得那个宣告不是问题的重点XD我更改一下内文好了 等我一下
作者: OSDBNetwork (路人甲)   2017-08-25 23:56:00
https://pastebin.com/ 在这边放上程式码,比较好解.
楼主: apolog (霜降小P)   2017-08-26 00:05:00
https://pastebin.com/X0EGcxPH 像这样吗? 第一次用
作者: OSDBNetwork (路人甲)   2017-08-26 00:11:00
xxx.log 呢? 如果log太多,自己简化一下.
楼主: apolog (霜降小P)   2017-08-26 00:14:00
https://pastebin.com/745Weu6K xxx.log 简化大概长这样https://pastebin.com/ATYCtf8N 稍微修正一下eval
作者: OSDBNetwork (路人甲)   2017-08-26 01:02:00
参考看看这个答案 https://pastebin.com/EU4w0T8H
楼主: apolog (霜降小P)   2017-08-26 01:14:00
楼上大大的方式可行喔! 不过这就代表if[]里面不能使用这类型的叠加变量了 ~"~a 是吗?
作者: OSDBNetwork (路人甲)   2017-08-26 06:55:00
if [ ... ] 里面可以使用叠加变量,参考看看 https://pastebin.com/pJDgjfG4完全不用eval版本, https://pastebin.com/YdPYphJ6很多大大都不建议用eval,参考最后的推文 https://goo.gl/e5B3jz
楼主: apolog (霜降小P)   2017-08-31 16:33:00
没想到O大后续还有提供正解! 已试过感谢 (跪拜

Links booklink

Contact Us: admin [ a t ] ucptt.com