【问题标题】:Retrieve the value of the table dynamically in bash [duplicate]在bash中动态检索表的值[重复]
【发布时间】:2017-09-27 23:21:47
【问题描述】:

我的意图是动态检索表的值,在第一次运行 t=1 的循环中,表的值应该是“表”,在第二次运行时应该是“其他表”,所以我尝试了使用for循环命名变量,但我的输出是“1”,“2”而不是“表”,“其他表”。但是如果我把表= $ TABLENAME $ 1,输出是“表”。 我挑不出错误,我是shell脚本新手,如有错误请见谅,谢谢!!

 TABLENAME1="table"
 TABLENAME2="other table"
 NUM_TABLE=2
 for (( t = 1; t <= ${NUM_TABLE}; t++ )){
 table=$TABLENAME$t
 echo $table
 }

【问题讨论】:

  • foobar=1; foobaz=2; a=foo; b=bar; c=baz; d=$a$b; echo ${!d}; d=$a$c; echo ${!d} 在你的情况下echo ${!table}
  • 感谢您的解释,大卫,我明白了。
  • 顺便说一句,这在BashFAQ #6 中有全面介绍,包括首先讨论避免出现问题的方法(使用关联数组和其他结构作为替代方案)。

标签: bash shell


【解决方案1】:

正如 David C. Rankin 在他的评论中所写,您的脚本应如下所示:

TABLENAME1="table"
TABLENAME2="other table"
NUM_TABLE=2
for (( t = 1; t <= ${NUM_TABLE}; t++ )){
    var_name="TABLENAME"$t
    echo ${!var_name}
}

首先,您需要获取变量名(var_name),然后使用 ${!var_name} 将变量名扩展为它的值

【讨论】:

  • 感谢 Maxim 的解释,现在对我来说很有意义。
  • 嘿。起初我以为你是 David Rankin,并且正要责备你回答重复而不是这样标记它(如How to Answer 中所述)。不过,新手并且不知道常见问题解答是什么的人会得到更多的宽大处理。 :)
猜你喜欢
  • 2020-05-14
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多