如何在bash中获取变量的内容

如何在bash中获取变量的内容

我有一个包含以下内容的配置文件:

配置scrm.sh

CDT_TRIGGER='69'
SR_TRIGGER='165'

在主脚本中,我需要将 CDT_TRIGGER 的内容(即 69)插入到名为 TRIGGER 的变量中。我唯一需要知道的是,我应该获取该确切变量内容的是另一个名为 ELM='CDT' 的(本地)变量

因此,在主脚本中,我执行:

主程序

#!/bin/bash

source config_scrm.sh

(some calculations to obtain the value of variable ELM)

ELM='CDT'

我需要 TRIGGER 为 69。

如果 ELM='SR',我需要 TRIGGER 为 165。等等,值远比此摘录中显示的要多。


不起作用的是:

MYSTRING='_TRIGGER'
TRIGGER=${$ELM$MYSTRING}

或者

TRIGGER=`echo "$ELM$MYSTRING"`

或者

TRIGGER=`$(echo "$ELM$MYSTRING")`

答案1

虽然$ELM$MYSTRING扩展为您想要的名称,但是TRIGGER=${$ELM$MYSTRING}不起作用,因为这里您需要参数扩展两次:首先是“内部”变量,然后是“外部”变量。

$如果你真的使用“外部”来替换命令,那么你尝试替换命令就没有什么意义了尝试来触发额外的参数扩展;但即便如此,它们也会因与上述类似的原因而失败。

那么,你参数扩展分为两个单独的步骤。eval为此,您需要:

eval 'TRIGGER=$'"$ELM$MYSTRING"

首先,内的变量""正常扩展,内的所有内容''保持不变。然后eval对结果字符串执行额外的解析,该字符串现在正好是TRIGGER=$CDT_TRIGGER。该解决方案是可移植的,但您应该小心使用eval。请参阅为什么eval在 Bash 中应避免使用,以及我应该使用什么来代替?

在 Bash 中,有一种更安全(但不便携)的方式来做你想做的事情:

wholename=$ELM$MYSTRING    # we need this in a single variable
TRIGGER=${!wholename}

附注:考虑变量名称使用小写字母

相关内容