Bash: Как создать строку, чтобы получить вывод из строки с определенным именем - PullRequest
0 голосов
/ 12 мая 2019

В скрипте 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.

Я рассмотрел несколько похожих вопросов и ответов, но все они касаются комбинирования выходных данных различными способами, а не создания имени строки из другой строки и вывода содержимого соответствующей строки.

1 Ответ

1 голос
/ 12 мая 2019

Вам нужно использовать косвенное расширение:

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

Используя весь ваш пример, это дает:

FooBar: здесь другое описание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...