shell eval如何工作?

时间:2014-06-27 15:18:40

标签: shell eval

所以我写了一个带参数的脚本。参数表示要运行哪种测试,qa或dev。我让脚本根据参数更改属性文件中的值,最初是:

dev="site1.com"
qa="site2.com"

if [ $1 == "dev" ]; 
then
   sed -i "s/site=.*/site=${dev}/g" myfile.properties
else ...

但是,我把它改为:

dev="site1.com"
qa="site2.com"

eval environment=\$$1
sed -i "s/site=.*/site=${environment}/g" myfile.properties

现在这样做,所以我不需要基于参数的if-else结构。

它如何运作" eval environment = \ $$ 1"这样做" $ {environment}"实际上将是" $ {dev}"如果" dev"是争论?

换句话说,使用dev作为参数(sh script.sh dev)
$ {environment} == $ {dev}而不是$ {environment} ==" dev"?

1 个答案:

答案 0 :(得分:0)

eval如何运作?

eval的基本方法是将参数视为命令行并重新评估命令行。行情被重新解释;重新解释I / O重定向;变量被重新解释。

假设:

eval environment=\$$1

第一次传递创建:

eval environment=$dev

eval然后将其解释为

environment=site1.com

最初在问题中的代码中的问题

即使在eval中,也不要在shell中为作业分配空格。

dev="site1.com"
qa="site2.com"

eval environment=\$$1
sed -i "s/site=.*/site=${environment}/g" myfile.properties

在Bash中,您可以使用:

environment=${!1}

这可以避免明确eval,如果(ab)用户输入sh yourscript '$(rm -fr $HOME &)'而不是sh yourscript dev,则可能会有危险。如果您使用eval,则最好仔细验证您要评估的内容。