1
在Perl,%ENV
可以访问环境:如何确定环境条目是否是bash函数?
e='() { echo This is not a func
}'
d() { echo This is a func
}
export e
export -f d
perl -e 'print $ENV{"d"},"\n",$ENV{"e"},"\n"'
但我还没有找到一种方法来告诉d或Ë是一个bash的功能。我如何从Perl中做到这一点?
上面的命令给出'function'。但'e'不是一个函数。 –
对于外壳,它是。一旦函数体被序列化到环境中,它就变成了一个单纯的字符串,与普通字符串无法区分。实际上,'perl -e'print qx(bash -c“e”)''会运行并回显'这不是func'。你发现了一个边缘案例,启发式不符合你的期望,处理它。 – daxim
进一步分析,似乎边缘情况是,如果变量以'(){'开头,那么它被视为一个函数 - 无论它是否为函数(例如结尾)可能会丢失)。这意味着我可以简单地查找'(){'作为前4个字符;不需要产生一个壳。 –