如果variables名存储为string,如何获得一个variables值?
我如何检索一个bashvariables值,如果我有variables名string?
var1="this is the real value" a="var1" Do something to get value of var1 just using variable a.
语境:
我有一些AMI( 亚马逊机器图像 ),我想启动每个AMI的几个实例。 一旦他们完成引导,我想要设置每个实例根据其AMItypes。 我不想在任何AMI内部烧制大量的脚本或秘密密钥,所以我准备了一个通用的启动脚本,并将其放在S3上,并提供了一个可公开访问的链接。 在rc.local中,我放了一小段代码来获取启动脚本并执行它。 这是我在AMI所拥有的一切。 然后,每个AMI访问一个适用于所有AMI的通用configuration脚本和每个AMI的特殊设置脚本。 这些脚本是私有的,需要一个签名的URL来访问它们。
所以,现在,当我触发AMI(my_private_ami_1)的一个实例时,我通过一个签名的URL来显示在S3上显示的另一个文件,其中包含键/值对的所有私有脚本的签名URL。
config_url="http://s3.amazo.../config?signature" my_private_ami_1="http://s3.amazo.../ami_1?signature" ...
当启动脚本运行时,它会下载上面的文件和source
文件。 然后检查它的AMItypes并为自己select正确的设置脚本。
ami\_type=GET AMI TYPE #ex: sets ami\_type to my\_private\_ami\_1 setup\_url=GET THE SETUP FILE URL BASED ON AMI\_TYPE # this is where this problem arises
所以现在我可以有一个通用的代码,不pipe他们的AMItypes是什么都可以触发实例,实例可以自己照顾自己。
您可以使用${!a}
。
这是一个间接参数扩展的例子:
参数扩展的基本forms是
${parameter}
。parameter
的值被replace。如果
parameter
的第一个字符是感叹号(!),则引入一个variables间接级别。 Bash使用由其余parameter
形成的variables的值作为variables的名称; 这个variables然后被展开,并且该值被用在其余的replace中,而不是parameter
本身的值。
X=foo Y=X eval "Z=\$$Y"
将Z设置为“foo”
请小心使用eval
因为这可能允许通过${Y}
值encryption代码。 这可能会通过代码注入造成伤害。
例如
Y="\`touch /tmp/eval-is-evil\`"
会创build/tmp/eval-is-evil
。 当然,这也可能是一些rm -rf /
。
修改我的search关键字,并得到它:)。
eval a=\$$a
谢谢你的时间。
现代的shell已经支持数组(甚至是关联数组)。 所以请使用它们,并使用较less的评估。
var1="this is the real value" array=("$var1") # or array[0]="$var1"
那么当你想调用它时,echo $ {array [0]}