gpt4 book ai didi

bash - C 类似于 Bash 中的预处理器宏

转载 作者:行者123 更新时间:2023-11-29 09:48:17 24 4
gpt4 key购买 nike

我不确定这个问题的名字是否合适,所以如果您能想到更好的名字,请重命名。

在 Bash 中,我有一个函数用于存储某些函数。考虑:

menv_funcs=()

function menv_function {
menv_funcs+=($1)
}

然后我以这种方式使用它:

menv_function fetch
function fetch {
...
}

不过我想这样使用它:

menv_function fetch {
...
}

本质上,我正在寻找类似于 C 中预处理器宏的东西,但我一直找不到方法。有任何想法吗?

最佳答案

据我所知,您无法直接实现这一点。不过,我可以想到您可能感兴趣的两种解决方案。

首先,您可以像往常一样声明函数,然后通过declare -F获取声明的函数列表。这可以像这样完成:

function fetch {
:
}

menv_funcs=()
while IFS=$"\n" read l; do
menv_funcs+=${l#declare -f }
done < <(declare -F)

这将导致 menv_funcs[@] 列出在调用代码段时声明的所有函数。当然,这也可能捕获不需要的函数。

为避免这种情况,您可以为函数名称添加一些前缀并过滤列表:

function menv_fetch {
:
}

menv_funcs=()
while IFS=$"\n" read l; do
if [[ ${l} == 'declare -f menv_'* ]]; then
menv_funcs+=${l#declare -f menv_}
fi
done < <(declare -F)

如果你真的想实现像宏这样的东西,你可以尝试使用eval:

menv_funcs=()

function menv_function {
local name=${1}
local body=${2}

menv_funcs+=( ${name} )
eval "function ${name} ${body}"
}

menv_function fetch "{
:
}"

但请注意,您实际上需要引用整个函数体并适本地转义所有内容。

关于bash - C 类似于 Bash 中的预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822083/

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