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

Im *_*ine 17 string variables bash concatenation

我有一个bash脚本我遇到一些问题,连接2个变量来调用第三个.

这是脚本的简化,但是在阅读文档之后,语法就是我的想法.

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

echo $(($var1_list_$var2));
Run Code Online (Sandbox Code Playgroud)

这与我得到的答案一样接近,它确认字符串并在标记化上抛出错误.

syntax error in expression (error token is "server1 server2 server3....
Run Code Online (Sandbox Code Playgroud)

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

编辑:清理了一下

Eri*_*ith 32

猛砸参考手册介绍如何使用参数扩展的实用的功能做了一些间接.在您的情况下,您有兴趣查找其名称由另外两个变量定义的变量的内容:

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

echo ${!combined}
Run Code Online (Sandbox Code Playgroud)

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


Rec*_*rse 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
Run Code Online (Sandbox Code Playgroud)

或者你可以使用bash快捷方式$ {!var}

 #!/bin/bash

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

 server_var="${var1}_list_${var2}"
 echo ${!server_var}
Run Code Online (Sandbox Code Playgroud)

两种方法都有效.