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