【问题标题】:Bash, Concatenating 2 strings to reference a 3rd variableBash,连接 2 个字符串以引用第三个变量
【发布时间】:2012-06-12 04:14:08
【问题描述】:

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

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

编辑:清理了一下

【问题讨论】:

标签: string bash variables concatenation


【解决方案1】:

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的内容定义的变量”

【讨论】:

  • 非常感谢!我尝试使用 ! 将其单行拍摄,但不断收到替换错误。所以你必须使用一个中间变量。再次感谢!
  • 那么如果不创建新变量真的没有办法吗?
  • @TimothySwan, eval "echo `echo \\$\\{${var1}_list_${var2}\}`" 但这太恶心了。
  • 您能否连接var1var2 并以类似于combined=${var1}+${var2} 的方式将该值设置为combined?我知道这行不通。
【解决方案2】:

高级 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}

任何一种方法都有效。

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2020-06-07
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2014-03-16
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多