20

我有一个 bash 脚本,我在连接 2 个变量以调用 3rd 时遇到了一些问题。

这是脚本的简化,但在阅读文档后语法让我难以理解。

server_list_all="server1 server2 server3";
var1 = "server";
var2 = "all";

echo $(($var1_list_$var2));

这与我得到正确答案的时间差不多,它确认字符串并在标记化时抛出错误。

syntax error in expression (error token is "server1 server2 server3....

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

编辑:清理了一下

4

2 回答 2

38

Bash 参考手册解释了如何使用参数扩展的简洁功能来进行一些间接操作。在您的情况下,您有兴趣查找名称由其他两个变量定义的变量的内容:

server_list_all="server1 server2 server3"
var1=server
var2=all
combined=${var1}_list_${var2}

echo ${!combined}

引用时的感叹号combined表示“使用名称由内容定义的变量combined

于 2012-06-12T04:22:46.180 回答
7

高级 Bash 脚本指南为您提供了答案 (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}

任何一种方法都有效。

于 2012-06-12T04:35:00.217 回答