LINUX.ORG.RU

[BASH] Двойной eval, зачем это нужно?


0

0

Дарю кусок кода, использующй конструкцию "eval eval" (которая выполняется аж за три прохода интерпретатора). Если кто догадается, зачем этот код мне может быть нужен, пишите :)

set_aliases () {
local base _base fld varsq
base="$1"; shift
_base="${base:0:2}"
if [ "${_base}" = 'f%' ]; then
varsq='${base}_${fld}'
else
varsq='${fld}_${base}'
fi

if echo "${_base}" | grep -q '^[frb]%'; then
base="${base:2}"
[ -n "$base" ] || return 1
fi

{
for fld in $@; do
eval eval "$fld='\$'{$varsq}"
done
}

return $?
}

★★★★★

Re: [BASH] Двойной eval, зачем это нужно?

значения fld и base берутся динамические -- первый eval подставляет текущие значения fld и base в varsq='${base}_${fld}' и формирует имя переменной. Второй eval присваивает содержимое этой переменной (с динамически сформированным именем) другой переменной (тоже с динамически сформированным именем $fld).

dilmah ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.