Переменные оболочки поиска по имени, косвенно [дублирующийся]

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

я был отмечен для того, чтобы не сделать вещи, что в моем описании говорится, что оно не делает.

процесс рассмотрения и неспособность действительно ответить, невыносимы.

13
задан inger 7 November 2009 в 19:56
поделиться

4 ответа

Из страницы руководства bash :

${!varname}

Если первым символом параметра является восклицательный знак, уровень вводится косвенное обращение к переменной. Bash использует значение переменной, сформированное из оставшейся части параметра, в качестве имени переменной; затем эта переменная расширяется, и это значение используется в остальной части подстановка, а не значение самого параметра. Это известное как непрямое расширение.

15
ответ дан 1 December 2019 в 20:43
поделиться

$ {! Varname} должен помочь

$ var="content"
$ myvar=var
$ echo ${!myvar}
content
1
ответ дан 1 December 2019 в 20:43
поделиться

Нет прямого синтаксиса, соответствующего Posix, только bash ism. Обычно я делаю так:

eval t="\$$varname"

Это будет работать в любой оболочке Posix, включая те системы, где bash - это оболочка входа в систему, а / bin / sh - что-то меньшее и быстрое, например ] ясень . Мне нравится bash, и я использую его для своей оболочки входа в систему, но я избегаю башизмов в командных файлах.


Примечание. Одна из проблем при написании сценариев, специфичных для bash, заключается в том, что даже если вы можете рассчитывать на установку bash, он может быть где угодно на пути. В этом случае было бы неплохо использовать полностью общий стиль / usr / bin / env shebang , но учтите, что он все еще не на 100% переносим и имеет проблемы с безопасностью.
12
ответ дан 1 December 2019 в 20:43
поделиться

Я обычно смотрю Advanced Bash-Scripting Guide , когда мне нужно освежить свои навыки Bash.

Что касается вашего вопроса, посмотрите Косвенные ссылки

] Обозначение:

Version < 2
\$$var

Version >= 2
${!varname}
1
ответ дан 1 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

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