/bin/ash环境下实现两数值列表逐行相减并存储结果
Ash环境下无数组/临时文件的传感器数值修正方案
核心思路
利用Ash原生的for循环遍历空格分隔的字符串,结合eval动态生成变量存储对应位置的修正系数与计算结果,全程在内存中完成操作,无需临时文件或bash数组。
实现脚本
# 1. 将固定修正系数存入corr_1、corr_2...变量 i=1 for corr_val in $var2; do eval "corr_$i=$corr_val" i=$((i + 1)) done # 2. 遍历动态传感器值,对应减去修正系数,存入delta_new_1、delta_new_2... i=1 for sensor_val in $var1; do # 获取对应位置的修正系数 eval "target_corr=\$corr_$i" # 整数差值计算(浮点需改用bc,见下方说明) delta=$((sensor_val - target_corr)) # 存入结果变量 eval "delta_new_$i=$delta" i=$((i + 1)) done
关键细节说明
- 规避文件错误:全程仅通过内存变量读写操作,彻底避开NAND设备/tmp目录的权限、空间限制,解决之前的文件打开异常问题。
- 替代bash数组:用
eval动态生成带索引的变量名(如corr_1),模拟数组的索引访问逻辑,适配Ash无数组的环境限制。 - 无需sed转换:直接通过
for val in $var遍历空格分隔的元素,无需额外处理换行格式,兼容性更强。 - 浮点值扩展:若传感器值为浮点数,将差值计算行替换为
delta=$(echo "$sensor_val - $target_corr" | bc -l),依赖设备内置的bc工具即可。
内容的提问来源于stack exchange,提问作者j4ckpug
相关产品推荐
相关产品推荐

