Grep并不总是从文件中找到正确的值

问题描述

我正在尝试从#define文件提取两个C值以在Shell脚本中使用它们。因此,我使用grep查找它们,然后打印它们。但是,变量有时为空。

// main.h
#define DEVICE_NO 1
#define FW_VERSION 1

脚本文件

#!/bin/bash - 
read_version()
{
  echo $(grep $1 "$projectdir/Inc/main.h" | cut -d ' ' -f 3-)
}

device_no=$(read_version "DEVICE_NO")
fw_version=$(read_version "FW_VERSION")
echo "DEVICE_NO = $device_no,FW_VERSION = $fw_version"

因此,期望的结果是:

DEVICE_NO = 1,FW_VERSION = 1

但是有时候变成了

5
DEVICE_NO =,FW_VERSION = 1

随机错过一个或两个值。头文件不会更改,因此它不是从那里来的。

更新

如前所述,我以为Windows的行尾可能是个问题,因此我将输出通过管道传输到tr删除\r,但没有任何区别。也尝试var=$(grep FW_VERSION file); $(echo ${var//[$'\t\r\n']} | cut ...无济于事。

我尝试使用awk代替cut,但是得到了相同的结果。

我将命令内的错误重定向到标准输出$(grep $1 file | cut -d ' ' -f 3 2>&1),但未获得任何其他信息

我将命令分为grep部分和cutgrep从未遗漏,但cut输出随机给出了一个空字符串作为输出

我仍然不知道5的来源,cutawk手册中没有任何东西将5扔到标准输出或stderr中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)