gpt4 book ai didi

bash - 将 C 头文件中的#defines 转换为 bash 变量

转载 作者:行者123 更新时间:2023-11-29 09:42:12 25 4
gpt4 key购买 nike

我正在尝试找出一种方法来读取包含一些 #define 的 C 头文件,并将这些宏转换为可由 shell 脚本访问的 bash 变量。

我首先尝试的是:

gcc -E -dM header_file.h|grep '^#define'|awk '{var=$2;$1=$2="";sub(/^[ \t]+/, "");print "export " var "=\"" $0 "\""}' > /tmp/tmp.sh
source /tmp/tmp.sh

这有效,但我真的不喜欢我生成这个临时文件

我接下来尝试的是类似的,希望摆脱临时文件:

gcc -E -dM  header_file.h|grep '^#define'|awk '{var=$2;$1=$2="";sub(/^[ \t]+/, "");print "export " var "=\"" $0 "\""}' |while read i
do
$i
done

但这不起作用,但是......似乎应该有另一种方法可以做到这一点,但我想不出,而且我很确定一旦有人发布我的真实感受愚蠢,但我仍然很感激任何人都可以提供帮助,为我指明正确的方向。

最佳答案

复杂的解决方案:

#!/bin/bash

source <(\
sed -r '{
/^#define/!d
/#define[ \t]*[^ \t]*$/d
s/[^ \t]*[ \t]*([^ \t]*)[ \t]*(.*)/\1="\2"/
/(""|\([^\)]*\))/d
}' <(gcc -E -dM HEADERFILE)
)

哪里

/^#define/!d 保持以 #define 开头的行

/#define[\t]*[^\t]*$/d 删除宏定义为空的行

s/[^\t]*[\t]*([^\t]*)[\t]*(.*)/\1=\2/ 创建等式

,进程被替换并且描述符可以被获取。

关于bash - 将 C 头文件中的#defines 转换为 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47483672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com