首页 > 解决方案 > Bash:如何构建字符串以从特定名称的字符串中获取输出

问题描述

在一个 bash 脚本中,我有一个从另一个程序的输出返回的代码ipsumCode,并将每个代码(有数百个)对应的自定义注释设置为字符串,以便于编辑。

我不是依赖于每个代码的 if 语句并为每个代码构建一个自定义注释,而是试图将其全部简化为一个if可以显示适当输出的测试。

#!/bin/bash

identifier="FooBar"

#...
msg_456="Some description here."
#...
msg_599="A different description here."
msg_600="Yet another different description here."
#...

# $ipsumCode is set by output from another program, but hard-code it here to test
ipsumCode=599
ipsumMessage=msg_$ipsumCode

#...

if [ "$ipsumCode" -ge 456 ]; then
    printf "$identifier: $ipsumMessage\n"
#...
fi

由于ipsumCode在这种情况下是 599,我如何显示的内容msg_599

以上显示:

FooBar: msg_599

期望的输出:

FooBar: A different description here.

我看过几个类似的问题和答案,但都处理以各种方式组合输出,而不是从另一个字符串构建字符串名称并输出匹配字符串的内容。

标签: stringbashif-statement

解决方案


您需要使用间接扩展:

printf "$identifier: ${!ipsumMessage}\n"

使用您的整个示例,这给出了:

FooBar:这里有不同的描述。


推荐阅读