Bash,连接2个字符串以引用第3个变量

时间:2012-06-12 04:14:08

标签: string bash variables concatenation

我有一个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....

在文档中没有真正看到任何内容,但它应该是可行的。

编辑:清理了一下

2 个答案:

答案 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}

两种方法都有效。