How does shell eval work? -
so wrote script takes argument. argument denotes kind of tests run, either qa or dev. have script change value in properties file based on argument, originally:
dev="site1.com" qa="site2.com" if [ $1 == "dev" ]; sed -i "s/site=.*/site=${dev}/g" myfile.properties else ...
but, changed to:
dev="site1.com" qa="site2.com" eval environment=\$$1 sed -i "s/site=.*/site=${environment}/g" myfile.properties
which makes don't need if-else structure based on argument.
how work "eval environment = \$$1" makes "${environment}" "${dev}" if "dev" argument?
in other words, using dev argument (sh script.sh dev)
${environment} == ${dev} rather ${environment} == "dev"?
how eval
work?
the basic way eval
works arguments treated command line , command line re-evaluated. quotes re-interpreted; i/o redirection re-interpreted; variables re-interpreted.
given:
eval environment=\$$1
the first pass through creates:
eval environment=$dev
the eval
interprets as
environment=site1.com
problem in code in question
you don't put spaces around assignments in shell, in eval
.
dev="site1.com" qa="site2.com" eval environment=\$$1 sed -i "s/site=.*/site=${environment}/g" myfile.properties
in bash, you'd use:
environment=${!1}
this avoids explicit eval
, dangerous if (ab)user typed sh yourscript '$(rm -fr $home &)'
instead of sh yourscript dev
. if use eval
, had better validate evaluate.
Comments
Post a Comment