指示数以两者之间的指挥产出取代。
<代码>eval是指该产出,并按类型执行。
在这种情形下,我假设的是按字母顺序打印一些可变的任务,例如<编码>VARIABLE1=数值1或etenv VARIABLE1值
。 在此情况下,在以上<代码>eval之后,您应当有$VARIABLE1
,可在后面编码。
如果没有<代码>eval <>/code>,则只读“.pl”文字(我假设是Perl),不会影响sh工艺的环境。 通过使用<条码>eval,你再次准许《规则》修改这种环境。
这意味着,Perl必须知道其产出是用于粉碎的。 在什/巴什,可变转让的辛迪加不同。
ETA More attempted clarification:
如果是:
$SOME_DIR/util/dbget.pl
You get a bunch of variable assignment statements printed to your screen. This is not useful, and has no effect whatsoever on the actual variables in your shell.
如果是:
echo `$SOME_DIR/util/dbget.pl`
你得出了同样的结果,其方式是更加四舍五入:它不是直接在你的屏幕上打印的每升代码,而是印刷成一种投向钟码>/code>的指令的表述,然后是<代码>echo是实际印刷到屏幕上。 这种区别是微妙的,但很重要:背书将控制在外围,使其重新掌握。 一旦炮弹捕获了该产出,它就可以将其储存在变数中,将其输入档案中,或者与它一起做很多其他事情,即《珀尔法典》不必再写,才能处理。 Perl仍然只是印刷。
如果是:
eval `$SOME_DIR/util/dbget.pl`
Then what the shell does is execute the output of the Perl as if it were typed at the prompt. This is very powerful. It s also dangerous, because the surrounding program winds up executing code that the person who wrote that program has never seen. So you have to trust the source of that code (in this case the perl script) not to produce anything damaging (intentinonally or otherwise).