如果我将变量名作为字符串,如何检索 bash 变量值?
var1="this is the real value" a="var1" Do something to get value of var1 just using variable a.
我有一些 AMI(亚马逊机器映像),我想启动每个 AMI 的几个实例。他们完成启动后,我想根据其 AMI 类型设置每个实例。我不想在任何 AMI 中烘焙大量脚本或密钥,因此我准备了一个通用的启动脚本,并将其放在S3上,并提供可公开访问的链接。在 rc.local 中,我放了一小段代码来获取启动脚本并执行它。这就是我在 AMI 中的全部内容。然后每个 AMI 访问适用于所有 AMI 的通用配置脚本和每个 AMI 的特殊设置脚本。这些脚本是私有的,需要一个签名的 URL 才能访问它们。
所以现在,当我触发一个 AMI 实例 (my_private_ami_1) 时,我为 S3 上显示的另一个文件传递了一个签名 URL,该文件包含所有私有脚本的键/值对的签名 URL。
config_url="http://s3.amazo.../config?signature" my_private_ami_1="http://s3.amazo.../ami_1?signature" ...
当启动脚本运行时,它会下载上面的文件并且source‘s it. 然后它检查其 AMI 类型并为自己选择正确的设置脚本。
source
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
所以现在我可以有一个通用代码,它可以触发实例,而不管它们的 AMI 类型如何,并且实例可以自行处理。
您可以使用${!a}:
${!a}
var1="this is the real value" a="var1" echo "${!a}" # outputs 'this is the real value'
这是间接参数扩展的示例:
参数展开的基本形式是${parameter}。的值 parameter被替换。 如果 的第一个字符parameter是感叹号 (!),则它引入了变量间接级别。Bash 使用由其余部分形成的变量的值作为变量parameter的名称;然后扩展此变量,并将该值用于替换的其余部分,而不是其parameter自身的值。
参数展开的基本形式是${parameter}。的值 parameter被替换。
${parameter}
parameter
如果 的第一个字符parameter是感叹号 (!),则它引入了变量间接级别。Bash 使用由其余部分形成的变量的值作为变量parameter的名称;然后扩展此变量,并将该值用于替换的其余部分,而不是其parameter自身的值。