Локальная переменная как часть глобальной

[116299] Я думаю, что главное отличие очень просто в том, что [116714] эхо [116715] медленное. Рассмотрим так:[12155]Как видно выше, трудоемким этапом является распечатка данных. Если вы просто перенаправитесь в новый файл и прочитаете его, то [116716]намного [116717] будет быстрее, если прочитать файл только один раз. [12156]И, как и было запрошено, со строкой здесь:[12157]Эта еще медленнее, предположительно потому, что эта строка объединяет все данные в одну длинную строку, и это замедляет grep [116718]grep[116719]:[12158]Если переменная цитируется так, чтобы не происходило разделения, то все происходит немного быстрее:[12159]Но все равно медленнее, потому что шагом ограничения скорости является печать данных.[116311].
2
13.04.2017, 15:37
2 ответа

Попробуйте выполнить экспорт в объеме вызова Eval :

eval export ENV_${env}=some_param

Это гарантирует, что оболочка расширяется env _ $ {Env} , соответствующим образом к одному из ваших ожидаемых имен, прежде чем пытаться присвоить.

Вам также необходимо использовать EVAL При попытке получить значение, хранящееся в вашей переменной:

eval echo \$ENV_$env

Обратите внимание на обратную косание - это предотвращает попытки оболочки расширить несуществующую переменную $ Env_ , до тех пор, пока он не расширил $ env часть со встроенным EVAL . Это результат этого расширения, которая в конечном итоге передается в echo , что получает полное имя вашей динамической переменной и расширяет его, чтобы привести к тому, что вы хранятся в нем значением.

0
27.01.2020, 22:12

На основании этого ответа я считаю, что использование

varname="ENV_$env"
echo ${!varname}

может быть решением.

2
27.01.2020, 22:12

Теги

Похожие вопросы