shell - 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
part 和 a cut
,grep
永远不会错过,但cut
随机的输出会给出一个空字符串作为输出。
我仍然不知道这5
是从哪里来的,在标准输出或标准输出中没有任何内容cut
或awk
手册。5
解决方案
推荐阅读
- asp.net-core-mvc - 身份服务器 4 使用 FrontChannelLogoutUri 从所有客户端注销不起作用
- amazon-web-services - AWS Lambda 调用 Fargate 任务
- reactjs - ANT 设计推拉混淆
- azure-devops - 无法在远程服务器(VM)中为 Azure 发布管道安装代理(持续部署)
- javascript - “点击 1 获得 1,点击 2 获得 2”
- http - 如何充当中间人服务器在客户端和远程服务器之间添加 HTTP 标头?
- python - 反正有没有在正则表达式的搜索功能中使用变量?
- psql - 我怎样才能回滚 psql -f 命令?
- android - 如何在视图绑定中的活动中获取回收者视图当前项目文本值
- typescript - I'm getting a confusing legend in Highcharts (angular-highcharts)