所以我写了一个带参数的脚本。参数表示要运行哪种测试,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"?
答案 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
,则最好仔细验证您要评估的内容。