我不知道如何解释一个问题...但这就是我的意思
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
}
答案 0 :(得分:4)
这似乎有效:
fntext=$(cat <<EOF
function myfunc () {
echo hello world
}
EOF
)
然后:
$ eval "$fntext"
$ myfunc
hello world
虽然给出了您的示例,但您可以将所有输出转储到临时文件,然后使用.
运算符将其输入:
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
}
答案 1 :(得分:2)
您可以使用函数的文本构建一个字符串,然后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"
}
替代机制是使用echo
然后func=$( ...echos... )
该字符串捕获各种eval
命令的输出。构建字符串的技巧是确保分号位于所有正确的位置 - 使用echo
命令可能更容易,但您必须记住引用传递给eval
的值保留内部换行符。