From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 8 Nov 2007 19:12:25 +0200 From: Michael Shigorin To: smoke-room@lists.altlinux.org Message-ID: <20071108171225.GA7939@osdn.org.ua> Mail-Followup-To: smoke-room@lists.altlinux.org Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Subject: [room] =?koi8-r?b?W3RpcF0gYmFzaDogy8HLINDPzNXeydTYIMnN0SDQxdLF?= =?koi8-r?b?zcXOzs/KLCDJzdEgy8/Uz9LPyiAtLSDXIMTS1cfPyiDQxdLFzcXO?= =?koi8-r?b?zs/K?= X-BeenThere: smoke-room@lists.altlinux.org X-Mailman-Version: 2.1.9 Precedence: list Reply-To: shigorin@gmail.com, =?koi8-r?b?69XM2NTV0s7ZyiDPxtTP0MnL?= List-Id: =?koi8-r?b?69XM2NTV0s7ZyiDPxtTP0MnL?= List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Nov 2007 17:12:26 -0000 Archived-At: List-Archive: Здравствуйте. В процессе возни с бэкендом для альтераторового модуля наткнулся на "было бы неплохо здесь взять имя переменной из другой переменной". Попробовал (смутно помня, что когда-то с eval и \ такое делал); спросил коллег; наконец, погуглил: bash variable "name from variable" => http://www.linuxquestions.org/questions/programming-9/bash-how-to-get-variable-name-from-variable-274718/ A="abcd dcba" B=A C=${!B} echo $C A="abcd dcba" B=A C='eval "echo \$$B"' eval "$C" или как вариант -- name=a; a=1; eval echo \$$name name=a; a=1; eval c=\$$name Первый вариант (с ${!B}) -- явно sh/bash specific, по крайней мере мой zsh так не смог; eval \$$name работает в sh/bash/zsh/ash. Но этот самый вариант, судя по man bash, несколько более навёрнутый и может пригодиться для более обширных задач: ${!prefix*} ${!prefix@} Expands to the names of variables whose names begin with prefix, separated by the first character of the IFS special variable. ${!name[@]} ${!name[*]} If name is an array variable, expands to the list of array indices (keys) assigned in name. If name is not an array, expands to 0 if name is set and null otherwise. When @ is used and the expansion appears within double quotes, each key expands to a separate word. Может, кому-нибудь пригодится :) -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/