如何在 eval 命令中使用 exec?
How to use exec inside eval command?
我已经将 WORKAREA 设置为某个路径,并且在 Perl 代码中我定义如下:
eval 'exec $ENV{'WORKAREA'}/some/path'
if 0;
我收到错误消息,指出路径 $ENV{'WORKAREA'}/some/path
未定义。有人知道要定义这个吗?
我不确定你在那里复制了什么,但有一些问题。
首先,查看您提供给 eval
的字符串内部。这不是有效的 Perl:
exec $ENV{'WORKAREA'}/some/path
您正在尝试构建表示您想要 exec
的程序路径的字符串,因此引用整个内容(与任何其他字符串一样):
exec "$ENV{'WORKAREA'}/some/path"
甚至更好,使用通用引号,这样您以后就不必转义了:
exec q($ENV{'WORKAREA'}/some/path)
注意我这里用的是q()
。您不希望该字符串进行插值,因为该变量已经由您提供给 eval
:
的字符串进行了插值
eval "exec q($ENV{'WORKAREA'}/some/path)"
虽然我不确定您 eval
为什么这样做。也许您认为 eval
会保护您免受某些魔法的伤害。但是,exec
并没有做任何神奇的事情。它在您的程序中的存在不应影响任何其他内容:
if( 0 ) { # why are you doing this?
exec "$ENV{'WORKAREA'}/some/path"
}
我已经将 WORKAREA 设置为某个路径,并且在 Perl 代码中我定义如下:
eval 'exec $ENV{'WORKAREA'}/some/path'
if 0;
我收到错误消息,指出路径 $ENV{'WORKAREA'}/some/path
未定义。有人知道要定义这个吗?
我不确定你在那里复制了什么,但有一些问题。
首先,查看您提供给 eval
的字符串内部。这不是有效的 Perl:
exec $ENV{'WORKAREA'}/some/path
您正在尝试构建表示您想要 exec
的程序路径的字符串,因此引用整个内容(与任何其他字符串一样):
exec "$ENV{'WORKAREA'}/some/path"
甚至更好,使用通用引号,这样您以后就不必转义了:
exec q($ENV{'WORKAREA'}/some/path)
注意我这里用的是q()
。您不希望该字符串进行插值,因为该变量已经由您提供给 eval
:
eval "exec q($ENV{'WORKAREA'}/some/path)"
虽然我不确定您 eval
为什么这样做。也许您认为 eval
会保护您免受某些魔法的伤害。但是,exec
并没有做任何神奇的事情。它在您的程序中的存在不应影响任何其他内容:
if( 0 ) { # why are you doing this?
exec "$ENV{'WORKAREA'}/some/path"
}