Bash 如何使用eval创建函数
我不知道如何解释一个问题。。。但这就是我的意思Bash 如何使用eval创建函数,bash,function,Bash,Function,我不知道如何解释一个问题。。。但这就是我的意思 function make_dynamic_functions { echo "function fast_multiregex_check" echo "{" for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]* do
function make_dynamic_functions
{
echo "function fast_multiregex_check"
echo "{"
for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]*
do
echo "if [[ \$1 =~ ^$i\$ ]]; then"
echo "echo $i"
echo "exit"
echo "fi"
done
echo "}"
eval all-output-from-previous-echos
}
这似乎有效:
fntext=$(cat <<EOF
function myfunc () {
echo hello world
}
EOF
)
尽管给出了示例,但您可以将所有输出转储到一个临时文件中,然后使用
操作符将其源代码导入:
function make_dynamic_functions
{
(
echo "function fast_multiregex_check"
echo "{"
for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]*
do
echo "if [[ \$1 =~ ^$i\$ ]]; then"
echo "echo $i"
echo "exit"
echo "fi"
done
echo "}"
) > tmpfile
. tmpfile
}
您可以使用函数的文本构建字符串,然后
eval
字符串:
function make_dynamic_functions
{
func="function fast_multiregex_check"
func="$func {"
for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]*
do
func="$func; if [[ \$1 =~ ^$i\$ ]]; then"
func="$func echo $i;"
func="$func exit;"
func="$func fi;"
done
func="$func }"
eval "$func"
}
另一种机制是使用
func=$(…echos…
捕获各种echo
命令的输出,然后使用eval
该字符串。构建字符串的诀窍是确保分号位于所有正确的位置-使用echo
命令可能更容易,但您必须记住引用传递给eval
的值以保留内部换行符。我必须问:为什么要这样做?Bash已经很难正确编写了;这只会让事情变得更糟。eval
将e
和你的val
生命!!!!!请您在答案的评论中注明正确答案或告知我们答案是否有效
function make_dynamic_functions
{
func="function fast_multiregex_check"
func="$func {"
for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]*
do
func="$func; if [[ \$1 =~ ^$i\$ ]]; then"
func="$func echo $i;"
func="$func exit;"
func="$func fi;"
done
func="$func }"
eval "$func"
}