anonymous@RULINUX.NET~# Last login: 2024-11-05 12:40:23
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[bash]конкатенация имени переменной

Хочу вызывать функцию и, в зависимости от её параметров, обращаться к той или иной переменной, например: =code{ some_func 5 -> обращение к переменной PARAM_5 some_func 3 -> обращение к переменной PARAM_3 }

Как такое сделать в скриптах на sh?

PS: для Си такое есть в его препроцессоре:

  1.  #define ASD ASD##asd // ASD==ASDasd
  2.  

anonymous(*) (2009-11-23 23:22:00)

Midori/0.2.1 (X11; Linux i686; U; ru-ru) WebKit/531.2+

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [bash]конкатенация имени переменной от anonymous 2009-11-23 23:22:00
avatar
Скрыть

Re: [bash]конкатенация имени переменной

PARAM_3="world"

PARAM_5="hello"

some_func() {

eval x='$'PARAM_$1

echo $x

}

some_func 5

some_func 3

anonymous(*)(2009-11-23 23:40:19)

Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.2.15 Version/10.10
[#] [Добавить метку] [Редактировать] Ответ на: Re: [bash]конкатенация имени переменной от anonymous 2009-11-23 23:40:19
avatar
Скрыть

Re: [bash]конкатенация имени переменной

Спасибо, уже и сам нашёл.

Повторю для себя:

man bash про eval \$$a или ${!a}

anonymous(*)(2009-11-23 23:54:28)

Midori/0.2.1 (X11; Linux i686; U; ru-ru) WebKit/531.2+
[#] [Добавить метку] [Редактировать] Ответ на: Re: [bash]конкатенация имени переменной от anonymous 2009-11-23 23:40:19
avatar
Скрыть

Re: [bash]конкатенация имени переменной

Дополнительный вопрос: а как можно установить PARAM_n в зависимости от n? Что-то мне bash ругается на отсутствие команды, которая не команда, а содержимое переменной.

anonymous(*)(2009-11-24 00:13:03)

Midori/0.2.1 (X11; Linux i686; U; ru-ru) WebKit/531.2+
[#] [Добавить метку] [Редактировать] Ответ на: Re: [bash]конкатенация имени переменной от anonymous 2009-11-24 00:13:03
avatar
Скрыть

Re: [bash]конкатенация имени переменной

  1.  ~ $ x=5
  2.  ~ $ eval PARAM_$x=33
  3.  ~ $ echo $PARAM_5
  4.  33

anonymous(*)(2009-11-24 00:34:32)

Opera/9.80 (X11; Linux x86_64; U; ru) Presto/2.2.15 Version/10.10
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!