我有一个bash脚本我遇到了连接2个变量以调用第3个的一些问题。
这是脚本的简化,但在阅读文档之后,语法就是我的想法。
server_list_all="server1 server2 server3";
var1 = "server";
var2 = "all";
echo $(($var1_list_$var2));
这与我得到的答案一样接近,它确认字符串并在标记化上抛出错误。
syntax error in expression (error token is "server1 server2 server3....
在文档中没有真正看到任何内容,但它应该是可行的。
编辑:清理了一下
答案 0 :(得分:31)
Bash Reference Manual explains how you can use a neat feature of parameter expansion做一些间接。在您的情况下,您有兴趣找到其名称由另外两个变量定义的变量的内容:
server_list_all="server1 server2 server3"
var1=server
var2=all
combined=${var1}_list_${var2}
echo ${!combined}
引用combined
时的感叹号表示“使用名称由combined
的内容定义的变量”
答案 1 :(得分:7)
Advanced Bash Scripting Guide为您提供答案(http://tldp.org/LDP/abs/html/ivr.html)。你有两个选择,第一个是经典的shell:
#!/bin/bash
server_list_all="server1 server2 server3";
var1="server";
var2="all";
server_var="${var1}_list_${var2}"
eval servers=\$$server_var;
echo $servers
或者,您可以使用bash快捷键$ {!var}
#!/bin/bash
server_list_all="server1 server2 server3";
var1="server";
var2="all";
server_var="${var1}_list_${var2}"
echo ${!server_var}
两种方法都有效。