问题描述
我正在尝试从#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
部分和cut
,grep
从未遗漏,但cut
的输出随机给出了一个空字符串作为输出。
我仍然不知道5
的来源,cut
或awk
手册中没有任何东西将5
扔到标准输出或stderr中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)